.Net 利用消息在进程间通讯实现进程互操作
2024-09-30 18:17:53
有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据;还有可以使用网络端口实现进程间通讯、共享一片内存区域记录及传递各自进程的数据等;此处讲述在.net 下如何利用消息的传递及处理实现两个进程的通讯。
是的,这里所说的消息指的就是Windows的消息机制,对于 I T 菜鸟,可以这样简单理解Windows 消息机制:Windows系统可以同时运行很多很多应用程序,Windows系统要让某一个程序做一件事情,就会给这个程序发送一条消息通知该程序该做什么了。
先引入Windows API 方法 SendMessage :
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
给指定用于响应消息的窗体对象重写消息处理过程
protected override void WndProc(ref System.Windows.Forms.Message msg)
{
switch(msg.Msg)
{
case 0x0400:
bool OnOff = Convert.ToBoolean((int)msg.LParam);
break;
default:
base.WndProc(ref msg);
break;
}
}
好了,上述代码实现了接收消息的程序如何处理接收到的消息地址(ID)为0x0400的自定义消息。
现在只需要在用于发送消息的项目编写发送消息的内容即可
SendMessage(Program.hWnd, 0x0400, (IntPtr), (IntPtr));
传递其它类型数据,请参照C# <-->C/C++ 类型转换对照表,使用托管到非托管程序集转换数据。
如传递String类型数据,SendMessage()传string,接收的时候使用 string A = Marshal.PtrToStringAnsi(m.LParam) 。
最新文章
- svn 文件夹 无法提交
- Regist
- “我爱淘”第二冲刺阶段Scrum站立会议2
- Stimulsoft Reports筛选数据来绑定显示2个报表
- Oracle DB 备份和恢复的概念
- 运行时数据区即内存分配管理——JVM之六
- 12.06 JavaScript
- PHP开发经验中介(thinkphp3.2使用技巧)
- 网络唤醒全攻略(Wake On Lan)
- pyspider爬取TripAdvisor
- 创建emlog
- 学习windows编程 day3 之滚动条完善
- CentOS6.8安装RabbitMQ
- Python全栈开发-Day11-RabbitMQ/Redis
- STA/LTA方法
- vue修改对象属性值视图上没有更新
- JAVA框架 Spring 注解注入
- Sql 查询当天、本周、本月记录
- CTF之ROT加解密
- python之匿名函数和递归函数