.Net利用消息在进程间通讯实现进程互操作

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据;还有可以使用网络端口实现进程间通讯、共享一片内存区域记录及传递各自进程的数据等;此处讲述在.net 下如何利用消息的传递及处理实现两个进程的通讯。

是的,这里所说的消息指的就是Windows的消息机制,对于 I T 菜鸟,可以这样简单理解Windows 消息机制:Windows系统可以同时运行很多很多应用程序,Windows系统要让某一个程序做一件事情,就会给这个程序发送一条消息通知该程序该做什么了。

先引入Windows API 方法 SendMessage :

1[DllImport("User32.dll", EntryPoint ="SendMessage")]2PRivatestaticexternintSendMessage(IntPtr wnd,intmsg, IntPtr wP, IntPtr lP);

给指定用于响应消息的窗体对象重写消息处理过程

1protectedoverridevoidWndProc(refSystem.Windows.Forms.Message msg)2{3switch(msg.Msg)4{5case0x0400:6boolOnOff = Convert.ToBoolean((int)msg.LParam);7

break;8default:9base.WndProc(refmsg);10

break;11}12}

好了,上述代码实现了接收消息的程序如何处理接收到的消息地址(ID)为0x0400的自定义消息。

现在只需要在用于发送消息的项目编写发送消息的内容即可

1SendMessage(Program.hWnd,0x0400, (IntPtr)0, (IntPtr)1);

传递其它类型数据,请参照C# <-->C/C++ 类型转换对照表,使用托管到非托管程序集转换数据。

如传递String类型数据,SendMessage()传string,接收的时候使用 string A = Marshal.PtrToStringAnsi(m.LParam) 。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航