c# 发送者
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace sendmessageC1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
private const int WM_COPYDATA = 0x004A;
private void button1_Click(object sender, EventArgs e)
{
int hWnd = FindWindow(null, "消息接受者");
if (hWnd == 0)
{
MessageBox.Show("未找到消息接受者!");
}
else
{
string sendString = textBox1.Text;
byte[] sarr = System.Text.Encoding.Default.GetBytes(sendString);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)0;
cds.cbData = len + 1;
cds.lpData = sendString;
SendMessage(hWnd, WM_COPYDATA, 0, ref cds);
}
}
}
}
c# 接收者
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace sendmessageC2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
private static int WMA_InterPro = 0x004A;
protected override void DefWndProc(ref Message m)
{
if (m.Msg == WMA_InterPro)
{
COPYDATASTRUCT cds = new COPYDATASTRUCT();
Type t = cds.GetType();
cds = (COPYDATASTRUCT)m.GetLParam(t);
string receiveInfo = cds.lpData;
label1.Text = receiveInfo;
}
else
{
base.DefWndProc(ref m);
}
}
}
}