易语言SendNotifyMessage发送消息

WINDOWS 中窗口之间的通讯方法有不少,互发消息便是其中的一种。SendMessage和SendNotifyMessage这两个函数的作用就是向其它窗口发送消息。它们看起来很象,调用参数也一样,只是返回值不同,前者返回一个LRESULT,而后者返回一个BOOL。根据MSDN的描述,当这两个函数的调用者与接收消息的窗口处于同一线程时,两者的执行情况一样,都是等待消息被处理完以后再返回;而当它们处于不同线程时,SendMessage所在的线程将等待目标窗口所在线程处理完这个消息,其间它处于阻塞(BLOCK)状态,SendNotifyMessage则是仅仅将消息传给目标窗口的窗口过程函数,并立即返回,它不会一直等着这条消息被处理完。
在我的程序里我需要一些窗口在发生某些事情时能通知另外一个窗口。所以一开始我使用SendNotifyMessage来发送消息,调用形式如下:
SendNotifyMessage(hwnd,WM_NOTIFY,ControlID,(LRESULT)pNMHDR);
pNMHDR指向了一个NMHDR结构,这个结构里的code字段用我自己定义的通知代码填充。在2000底下,程序运行良好,消息能正常发送,目标窗口也能正常接收。但是在98底下,SendNotifyMessage就无论如何都不能成功执行,总是返回FALSE,这样一来目标窗口当然也就接收不到消息了。我没有办法,只好将所有的SendNotifyMessage全部替换为SendMessage,这时消息的发送和接收才按照我预计的方式进行。需要补充说明的是,在整个程序里我只有一个线程,所以这种情况下SendNotifyMessage和SendMessage应该是没有差别的,但是实际情况却让我百思不得其解。是我的理解不对还是MSDN描述有误?我真希望早点知道答案。

sendMessage,postMessage,sendnotifyMessage有啥区别

PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。

PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;

而SendMessage必须等待其他程序处理消息后才返回,继续执行。

这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。

sendmessage与sendnotifymessage的区别主要是体现在项不同的线程中传送消息的,

在想别的线程中传递消息的同时,sendmessage是阻塞的,即同步,要等到 其线程的中的proc函数处理,并返回处理结果后才会继续执行,发送消息的线程,而sendnotifymessage消息是非阻塞的即将消息发送后,即可返回返回的是该消息是否被正确的处理,而不是返回函数的处理结果。

当在发送本现场的处理消息时,两个函数没有区别,都是等待消息处理完后,返回处理的结果。

API比较PostMessageA和SendMessageA游戏屏蔽

SendNotifyMessageA

.版本 2
 
.DLL命令 发送通报消息_, 整数型, "user32.dll", "SendNotifyMessageA"
    .参数 窗口句柄, 整数型, , hwnd,用于接收消息的一个窗口的句柄
    .参数 标识符, 整数型, , wmsg,消息的标识符
    .参数 消息1, 整数型, , wParam,具体由消息决定
    .参数 消息2, 整数型, , lParam,具体由消息决定

易语言调用

.版本 2
 
.程序集 窗口程序集_启动窗口
.子程序 _按钮_发送消息_被单击
发送通报消息_ (按钮_测试效果.取窗口句柄 (), 245, 0, 0)
.子程序 _按钮_测试效果_被单击
信息框 (“发送消息按钮,按下了,测试效果按钮。”, 0, )

发布日期:

所属分类: 易语言 标签: