using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WinTrisEx01
{
public partial class Form1 : Form
{
public const int WM_COPYDATA = 0x004A;

int xpos=0;

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

IntPtr tailHandle = IntPtr.Zero;

public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SendToTail(1, ">>>>SendData:[" + xpos.ToString("00000") + "]");
xpos++;
}

private void SendToTail(int index, string data)
{
tailHandle = FindWindow(null, "RecvSendDataMonitoring");
try
{
byte[] dataByte = Encoding.UTF8.GetBytes(data);

COPYDATASTRUCT copyData = new COPYDATASTRUCT();
copyData.dwData = (IntPtr)0;
copyData.cbData = data.Length;
copyData.lpData = Marshal.AllocHGlobal(dataByte.Length);
Marshal.Copy(dataByte, 0, copyData.lpData, dataByte.Length);

IntPtr sendData = Marshal.AllocHGlobal(Marshal.SizeOf(copyData));
Marshal.StructureToPtr(copyData, sendData, true);

IntPtr _result = SendMessage(tailHandle, WM_COPYDATA, (IntPtr)index, sendData);

Marshal.FreeHGlobal(copyData.lpData);
Marshal.FreeHGlobal(sendData);
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
}
}

+ Recent posts