C# 下的进程间的通讯 -- 发消息篇

Net 并没有提供进程间通讯的类,其实这句话是不对的,.Net提供了强大的进程间通讯的功能,不仅可以完成本机上进程间的通讯,还可以完成网络上的任意两台计算机间的进程通讯。这些技术分别为WebService、企业级服务、.NET 远程处理,我会在后面的文章中逐步学习总结。 这里还是借助系统的功能来实现,提供一种利用发送消息的方法实现的进程间的通信。 发送方需要调用两个系统API:SendMessage与FindWindow。 非托管定义如下: [DllImport("User32.dll",EntryPoint="SendMessage")] private static extern int SendMessage( int hWnd, //目标窗口的handle int Msg, // 消息 int wParam, // 第一个消息参数 ref COPYDATASTRUCT lParam // 第二个消息参数 ); [DllImport("User32.dll",EntryPoint="FindWindow")] private static extern int FindWindow(string lpClassName,string lpWindowName); 还有一个数据结构: public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } WM_COPYDATA消息: const int WM_COPYDATA = 0x004A; 发送消息代码如下: int WINDOW_HANDLER = FindWindow(null,@"接收窗口"); if(WINDOW_HANDLER != 0) { byte[] sarr = System.Text.Encoding.Default.GetBytes(txtMsg.Text); int len = sarr.Length; COPYDATASTRUCT cds; cds.dwData = (IntPtr) 100; cds.lpData = txtMsg.Text; cds.cbData = len + 1; SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds); } 接收方需要上面的那个数据结构的定义与消息常量的定义,然后重写主窗口的DefWndProc方法: protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch(m.Msg) { case WM_COPYDATA: COPYDATASTRUCT mystr = new COPYDATASTRUCT(); Type mytype = mystr.GetType(); mystr =(COPYDATASTRUCT)m.GetLParam(mytype); txtMsg.Text =mystr.lpData; break; default: base.DefWndProc(ref m); break; } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值