应用程序间消息的互发

zzz同样是 Windows环境下32位汇编语言程序设计 书中的例子,程序A向程序B发送消息,程序B响应这个消息,代码如下
Code

接收程序代码
Code

例子很简单,但是心里有个疑问,程序A本身产生的消息和程序B产生的消息之间是否有什么差别?能否在程序中识别当前的消息是否本身产生的?否则响应程序的流程不就是乱了吗?
我感觉这个消息互发的功能应该没这么简单,继续研究去~
发现一件有趣的事情,不仅是WM_SETTEXT消息可以通过另外的程序发送,连WM_CLOSE,WM_DESTROY消息也可以,也就是说我可以用一个程序远程关掉另外一个程序,尝试了一下,程序代码如下
Code
确实是可以的,开了send程序以后receive程序真的就被关掉了,哈哈。但是,到此又有了一个疑问,还有一个消息WM_QUIT也是完成关闭窗口的功能的,这个消息能成功吗?
试验了一下,竟然不行!问题处在哪里?google了一下,原来SendMessage直接将消息发送到窗口,并调用窗口处理程序,完成消息响应,即SendMessage 根本就没有将消息发到消息对列中,因此GetMessage无法从消息对列中收到WM_QUIT的消息,所以receive程序无法关闭。
那是不是没办法发送WM_QUIT消息了呢?当然不是,WINDOWS给我们提供了PostMessage函数,用法和SendMessage函数一样,使用PostMessage函数是将消息插入消息队列中的,因此recieve程序就能够响应WM_QUIT消息了,用PostMessage函数试验一下,成功!
那么PostMessage函数和SendMessage函数是否一样呢?我们用PostMessage函数来发送一下WM_SETTEXT命令试一下,receive函数没反应!看来,PostMessage和SendMessage名字差不多,功能可是有很大不同的,具体有什么不同,研究下,放到下篇博客再说了:)
posted @ 2009-07-27 14:29  认真做人,认真做事  阅读(707)  评论(0编辑  收藏  举报