C#进程间通信:[3]自定义消息
本文介绍在C#中如何使用和自定义Windows消息实现进程间的通信,并传递一个字符串类型。
![C#进程间通信:[3]自定义消息](https://exp-picture.cdn.bcebos.com/3b8fb4d7726b0ce20dbd42bbef781423bfb9b6f2.jpg)
2、修改主窗体,布局如下:
![C#进程间通信:[3]自定义消息](https://exp-picture.cdn.bcebos.com/6ca9846186254193bbb2c6b0df1bd10ff326abf2.jpg)
4、添加公开类Win32Api,代码如下:public class Win32Api { #re爿讥旌护gion msg public const int USER = 0x0400; public const int UM_1 = USER + 1; #endregion #region api [DllImport("user32.dll")] public static extern void PostMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam); #endregion }
5、在Form1中添加代码,如下: public partial class Form1 : Form { IntPtr h; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var f = new Form2(); h = f.Handle; f.Show(); } private void button2_Click(object sender, EventArgs e) { string str=textBox1 .Text ; IntPtr i=Marshal .StringToHGlobalAuto (str); Win32Api .PostMessage (h,Win32Api.UM_1 ,0,i); } }
6、在Form2中添加代码,如下: public partial class Form2 : Form { publi艘早祓胂c Form2() { InitializeComponent(); } protected override void WndProc(ref Message m) { switch (m.Msg) { case Win32Api .UM_1 : string str = Marshal.PtrToStringAuto(m.LParam); textBox1.Text += str+Environment .NewLine ; break; default : base.WndProc(ref m); break; } } }
7、调试运行,结果如下:
![C#进程间通信:[3]自定义消息](https://exp-picture.cdn.bcebos.com/6bbfdd14f1c595eec59bc19327530688902c9af2.jpg)