PostMessage
函数功能描述:将一个消息放到与指定窗口创建的线程相关的消息队列中,不等线程处理消息就返回。消息队列里的消息通过调用GetMessage或PeekMessage函数而获得。
.函数原型:
BOOL PostMessage(
HWND hWnd, // 目标窗口句柄
UINT Msg, // 被张贴的消息
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二个消息参数
);
.参数:
hWnd
窗口过程接收消息的窗口句柄。可取有特定含义的两个值:
取值 含义
HWND_BROADCAST 消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。
消息不被送到子窗口。
NULL 函数的行为和将参数dwThreadId设置为当前线程的标识符的PostThreadMessage函数一样。
Msg
指定被发送的消息;
wParam
指定附加消息的特定信息;
lParam
指定附加消息的特定信息。
.返回值:
如果调用函数成功,返回非零值。
如果调用函数失败,返回值是零。获得更多的错误信息,请调用GetLastError函数。
.备注:
需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。
如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage或SendMesssgeCallback),消息参数不能包含指针,否则,操作将失败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放它。
PostMessage和SendMessage有什么区别?
在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如:
打开一个窗口-->等待直到窗口结束
这个时候就可以用到SendMessage
如果在打开这个窗口后仍然需要对该窗口的界面进行设置,比如Edit的value等等,比如:
打开一个窗口-->控制窗口的control的属性
这个时候就需要PostMessage
使用一个钩子程序截获消息后,使用SendMessage把消息发送到主处理程序进行处理,但是在主处理程序还没有完成任务的时候,被设置钩子的程序进入了停止的状态,不可以处理
WM_PAINT,
WM_MOVE,
.......等的基本信息,
必须要等SendMessage发送出的消息完成后,才能继续运行,整个界面一片空白,把钩子消息设置成PostMessage的发送消息形式后,问题解决!
我查了MSDN对这两个API的定义,
PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
而SendMessage必须等待其他程序处理消息后才返回,继续执行。
PostMessage的返回值表示PostMessage函数执行是否正确;
而SendMessage的返回值表示其他程序处理消息后的返回值。
使用这两个发送消息函数的最重要的是要看你的程序
分享到:
相关推荐
在C#中SendMessage和PostMessage的参数传递 在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND ...
PostMessage和SendMessage的区别
SendMessage与PostMessage区别,区别演示示例
关于FindWindow PostMessage SendMessage PeekMessage 的两个例子
资源包含两个源程序,里面是借用MFC的消息通信实现简单的两个进程间通信,嗯主要是通过SendMessage或PostMessage,功能实现简单便捷。
PostMessage和SendMessage 简单程序
主要示例在C#中的SendMessage,PostMessage,包含两个示例,一个资料文档,希望受用。 在C#中 API 消息处理 SendMessage PostMessage 进程通信 发消息 实例 文档资料
1.下面我要实现的功能: 1.VS2010 基于对话框的操作; 2.两个对话框CMessageDlg和ConeDlg; 3.CMessageDlg为父窗口,ConeDlg为子窗口; 4.父窗口上有一个按钮用于弹出子窗口,子窗口也有一个按钮用来触发事件;...
资源包含两个源程序,里面是借用MFC的消息通信实现简单的两个进程间通信,嗯主要是通过SendMessage或PostMessage,功能实现简单便捷。该资源是我想搞点分数,分多的大佬麻烦赏赐点,没分的可以找找我另一个同样的...
API :GetScrollBarInfo GetScrollInfo SetScrollInfo PostMessage SendMessage 的实例 忙得很没有整理,自用备忘!嫌文件乱就不要下啦,我自己用的,如果要下的,直接看form2里面的api类!
主要介绍了VC自定义消息响应函数postmessage用法示例,并对比说明了postmessage与sendmessage的用法区别,需要的朋友可以参考下
使用postMessage SendMessage 进程间通讯 管道 剪贴板 邮槽 共享内存 在子父进程间用postmessage通讯,本来用管道是最好的
1.保证无毒 2.简单,方便,实用 3.实例可以自行改用 4.如有非法,本人无法律责任,由改动代码人负责! 5.需要更多本人作品,查找标签“朱建强” 6.请下载,杀毒后再使用!
主要介绍了VC中SendMessage和PostMessage的区别,较为全面的分析了SendMessage和PostMessage运行原理及用法上的不同之处,非常具有实用价值,需要的朋友可以参考下
一种将CString对象发送到当前进程中的Windows的可靠机制。
VC++消息传递,实现自定义消息,消息的映射,通过 postmessage和sendmessage实现消息的映射,非队列消息
postMessage在使用时,需要传入2个参数,data和originUrl。data是指需要传递的内容,但是部分浏览器只能处理字符串参数,所以我们一般把data序列化一下,即JSON.stringify(),originUrl是指目标url,指定的窗口。 ...
而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。 请问,调用SendMessage后弹出另外一个窗体,如何再接着处理这个弹出的窗体。最好有代码示例,谢谢! 求解第二步.........
http://blog.csdn.net/lindonglian/article/details/43315681