1。为了实现两个.exe 通信
新建两个Windows窗体应用项目,修改接收方的Text属性,复制粘贴代码(看清楚在复制),接收方显示数据的控件,改成自己的,发送方的控件也是。打开两个程序,测试。
发送方代码
public partial class Form1 : Form { public Form1() { InitializeComponent(); } //WM_COPYDATA消息所要求的数据结构 public struct CopyDataStruct { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } public const int WM_COPYDATA = 0x004A; //通过窗口的标题来查找窗口的句柄 [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int FindWindow(string lpClassName, string lpWindowName); //在DLL库中的发送消息函数 [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage ( int hWnd, // 目标窗口的句柄 int Msg, // 在这里是WM_COPYDATA int wParam, // 第一个消息参数 ref CopyDataStruct lParam // 第二个消息参数 ); private void button2_Click(object sender, EventArgs e) { //将文本框中的值, 发送给接收端 string strURL = textBox3.Text; CopyDataStruct cds; cds.dwData = (IntPtr)1; //这里可以传入一些自定义的数据,但只能是4字节整数 cds.lpData = strURL; //消息字符串 cds.cbData = System.Text.Encoding.Default.GetBytes(strURL).Length + 1; //注意,这里的长度是按字节来算的 SendMessage(FindWindow(null, "接收端"), WM_COPYDATA, 0, ref cds); // 这里要修改成接收窗口的标题(Text属性)“接收端” } }
接收方代码
public partial class Form2 : Form { public Form2() { InitializeComponent(); } //WM_COPYDATA消息所要求的数据结构 public struct CopyDataStruct { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } private const int WM_COPYDATA = 0x004A; //接收消息方法 protected override void WndProc(ref System.Windows.Forms.Message e) { if (e.Msg == WM_COPYDATA) { CopyDataStruct cds = (CopyDataStruct)e.GetLParam(typeof(CopyDataStruct)); listBox1.Items.Add(cds.lpData.ToString()); //将文本信息显示 } base.WndProc(ref e); } }