Windows是通过消息的机制实现进程间信息的传递的。在C#中,我们同样可以利用这个机制实现通信。具体方式如下:
首先,定义消息,并从win32 API中导入发送消息和寻找窗体的函数。
public const int USER = 0x0400;//用户自定义消息的开始数值
[DllImport("user32.dll")]
public static extern void PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string strClass, string strWindow);
然后,在需要发送消息的地方加入:
IntPtr ptrWnd = FindWindow(null, "test");
PostMessage(ptrWnd, USER + 1, 168, 51898);
最后,在接收的地方重写DefWndProc()函数。
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case USER + 1:
//输入执行的内容
this.Invalidate(true);//调用重绘命令
break;
default:
base.DefWndProc(ref m);//一定要调用基类函数,以便系统处理其它消息。
break;
}
}
当然,这种写法比较奇怪,特别是168,51898这种数字,看起来真是让人不明所以。但这的确是一种窗体间通信的方法,而且和MFC的思路比较类似。