文号
t16095
阅读
25674
回复
16
收藏
10
[原创]VB使用SendMessage简单实现进程间通信
2009/06/18
IP:湖南
在程序设计中,有时需要在两个独立的进程间实现通信,例如一个程序的升级进程Update.exe在升级完成后需要通知主程序关闭以替换主程序文件。进程间通信有多种方法,如文件监测法、注册表监测法、共享内存法和SendMessage发送全局消息法等,前两种效率很低,后两种效率高但过于复杂。
经过一番尝试,本人发现了一种既高效又容易实现的进程间通信方法,现阐述原理如下并附源码。
接收端设置一个不可见并有特定内容的文本框,做为发送端的寻找对像。发送端启动后通过函数FindWindow和FindWindowEx寻找接收者窗体并接着寻找接收文本框,获得句柄。发送端发送信息时,通过找到的句柄向接收者用SendMessage发送设置标题的消息,接收端收到消息后会自动更改文本框的标题属性从而触发Change事件,在Change事件过程中编写代码获得文本框中的内容并复位文本框内容以准备下次接收信息。至此一个发送和接收的过程完成。
源码

attachment icon 示例_进程间通信.rar 15.72KB RAR 255次下载
+871
科创币
delete
2009/06/18
学术贴
ldc作者
17年7个月前IP:未同步
110383
2楼
Socket我也考虑过,也不错,不过有一个缺点就是会弹出防火墙提示,尽管它访问的IP只是127.0.0.1。
引用
评论
ldc作者
17年7个月前IP:未同步
110697
9楼
用Timer不断地读文件,当遇到硬盘繁忙的时候会有严重的延时。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的