首页编程postmessage PostMessage和SendMessage的区别

postmessage PostMessage和SendMessage的区别

编程之家2023-11-01172次浏览

老铁们,大家好,相信还有很多朋友对于postmessage和PostMessage和SendMessage的区别的相关问题不太懂,没关系,今天就由我来为大家分享分享postmessage以及PostMessage和SendMessage的区别的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

postmessage PostMessage和SendMessage的区别

PostMessage和SendMessage的区别

一、主体不同

1、SendMessage:将指定的消息发送到一个或多个窗口。

2、PostMessage:是Windows API(应用程序接口)中的一个常用函数,用于将一条消息放入到消息队列中。

二、特点不同

1、SendMessage:为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。

2、PostMessage:将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。

postmessage PostMessage和SendMessage的区别

三、规则不同

1、SendMessage:指定要接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

2、PostMessage:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。

参考资料来源:百度百科-SendMessage

参考资料来源:百度百科-PostMessage

易语言PostMessage

.版本 2

postmessage PostMessage和SendMessage的区别

.DLL命令 SendMessage,整数型,"user32.dll","SendMessage",,如果函数调用成功,返回非零值:如果函数调用失败,返回值是零

.参数 hWnd,整数型,,其窗口程序接收消息的窗口的句柄

.参数 Msg,整数型,,指定被寄送的消息

.参数 wParam,整数型,,指定附加的消息特定的信息

.参数 IParam,整数型,,指定附加的消息特定的信息

.DLL命令 PostMessage,整数型,"user32.dll","PostMessage",,如果函数调用成功,返回非零值:如果函数调用失败,返回值是零

.参数 hWnd,整数型,,其窗口程序接收消息的窗口的句柄

.参数 Msg,整数型,,指定被寄送的消息

.参数 wParam,整数型,,指定附加的消息特定的信息

.参数 IParam,整数型,,指定附加的消息特定的信息

sendmessage和postmessage的区别

1、首先是返回值意义的区别,我们先看一下 MSDN里的声明:

LRESULT SendMessage(

HWND hWnd,

UINT Msg,

WPARAM wParam,

LPARAM lParam

);

BOOL PostMessage(

HWND hWnd,

UINT Msg,

WPARAM wParam,

LPARAM lParam

);

其中 4个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个 32位的数,只是意义不一样),LRESULT表示的是消息被处理后的返回值,BOOL表示的是消息是不是 Post成功。

2、PostMessage是异步的,SendMessage是同步的。

PostMessage只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。

3、如果在同一个线程内,SendMessage发送消息时,由 USER32.DLL模块调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环分派到目标窗口(DispatchMessage)。

如果在不同线程内,SendMessage发送消息到目标窗口所属线程的消息队列,然后发送消息的线程在 USER32.DLL模块内监视和等待消息处理,直到目标窗口处理完返回。SendMessage在返回前还做了很多工作,比如,响应别的线程向它 SendMessage。Post到别的线程时,最好用 PostThreadMessage代替 PostMessage,PostMessage的 hWnd参数可以是 NULL,等效于 PostThreadMessage+ GetCurrentThreadId。Post WM_QUIT时,应使用 PostQuitMessage代替。

4、系统只整编(marshal)系统消息(0到 WM_USER之间的消息),发送用户消息(WM_USER以上)到别的进程时,需要自己做整编。

用 PostMessage、SendNotifyMessage、SendMessageCallback等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。

5、在 Windows 2000/XP里,每个消息队列最多只能存放 10,000个 Post的消息,超过的还没被处理的将不会被处理,直接丢掉。这个值可以改得更大:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] USERPostMessageLimit,最小可以是 4000。

怎么使用postMessage进行通信

postMessage是window的方法,可以通过这个方法实现两个窗口之间的通信,总结下俩大概有两种类型

1.两个页面之间发送信息

2.页面向页面中的iframe发送信息

通过上边两个简单的例子可知,进行这种通信只需要简单的两个方法

第一步:分发消息,及把消息发送给相应的窗口

otherWindow.postMessage(message, targetOrigin, transfer);

otherWindow:你要发送消息给哪个窗口就是哪个窗口的引用,注意不是当前窗口,可以是iframe的窗口对象,或者是window.open返回的窗口对象。如果获取不到otherWindow是没法对相应的窗口发送信息的。

message:将要发送给otherWindow的数据。

targetOrigin:指定哪些窗口可以获取到发送的数据(可以使用“*”表示无限制)。

transfer:是一串和message同时传递的Transferable对象,可选。

第二步:监听message事件,获取另一个窗口发送给当前窗口的信息

window.addEventListener('message', function, useCapture);

message:事件类型。

function:'message'事件发生时调用的函数。

useCapture:布尔值,使用事件冒泡还是事件捕获,可选。

通过上面接单的两步就可以实现一个简单的通信

感谢您的阅读!希望本文对解决您关于postmessage和PostMessage和SendMessage的区别的问题有所帮助。如果您还有其他疑问,欢迎随时向我们提问。

鼠标特效代码?急求各种网页鼠标特效代码(只要代码,不要网址)seo排名优化培训(网站排名优化培训)