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

最新文章

  1. svn 文件夹 无法提交
  2. Regist
  3. “我爱淘”第二冲刺阶段Scrum站立会议2
  4. Stimulsoft Reports筛选数据来绑定显示2个报表
  5. Oracle DB 备份和恢复的概念
  6. 运行时数据区即内存分配管理——JVM之六
  7. 12.06 JavaScript
  8. PHP开发经验中介(thinkphp3.2使用技巧)
  9. 网络唤醒全攻略(Wake On Lan)
  10. pyspider爬取TripAdvisor
  11. 创建emlog
  12. 学习windows编程 day3 之滚动条完善
  13. CentOS6.8安装RabbitMQ
  14. Python全栈开发-Day11-RabbitMQ/Redis
  15. STA/LTA方法
  16. vue修改对象属性值视图上没有更新
  17. JAVA框架 Spring 注解注入
  18. Sql 查询当天、本周、本月记录
  19. CTF之ROT加解密
  20. python之匿名函数和递归函数

热门文章

  1. 搭建本地Ubuntu 镜像服务器
  2. iOS开发 使用Xcode自带的Leaks
  3. javascript高级知识分析——作为对象的函数
  4. 关于VFP9.0备注字段(memo)插入编辑问题
  5. 浅谈C中的指针和数组(五)
  6. meta的属性详解
  7. HTML前端技术(JS的使用,包括数组和字符串)
  8. 安装虚拟机VMWare时出现1021错误的解决办法
  9. HTML5 标签元素的一些注意事项
  10. RedMine 版本管理工具