迥异和诡异的SendMessage和PostMessage】的更多相关文章

1       故障现象 故障现象1:能够收到SendMessage()发出的消息,但收不到PostMessage()发出的消息. 故障现象2:能够收到PostMessage()发出的消息,但收不到SendMessage()发出的消息. 2       两个比喻 从发送端来说: SendMessage()好比电信系统提供通话服务. 如果对方占线,立即返回. 如果对方不占线,就保持呼叫→接收端接听→通话→挂断.在挂断之前,发送端处于阻塞状态,不可以干别的事. PostMessage()好比电子邮件…
SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别为: 1.SendMessage.PostMessage的运行机制. 2.SendMessage.PostMessage的运行内幕. 3.SendMessage.PostMessage的内部实现. 注:理解这篇文章之前,必须先了解Windows的消息循环机制. 1.SendMessage.PostM…
SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别为: 1.SendMessage.PostMessage的运行机制. 2.SendMessage.PostMessage的运行内幕. 3.SendMessage.PostMessage的内部实现. 注:理解这篇文章之前,必须先了解Windows的消息循环机制. 1.SendMessage.PostM…
WPARAM 和 LPARAM wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量:另一个是LONG类型的32位整型变量. 因此根据匈牙利命名法,16位的变量就被命名为wParam, 32位的变量就被命名为lParam. 而到了Win32API中,原来的16位变量也被扩展为32位,因此此时wParam和lParam的大小完全相同. 区别及习惯用法: MS在使用时两种参数分别代表不同的含义和内容,WPA…
原文:http://www.cnblogs.com/wind-net/archive/2012/11/01/2750123.html SendMessage 和 PostMessage 的区别 1.首先是返回值意义的区别,我们先看一下 MSDN 里的声明: LRESULT SendMessage(        HWND hWnd,        UINT Msg,        WPARAM wParam,        LPARAM lParam);BOOL PostMessage(    …
对于SendMessage 和 PostMessage 平时口头的解释是 SendMessage 发送消息后等待返回, PostMessage 发送消息后立即返回 . 但是这样解释还是不具体,什么叫等待 什么叫立即? 下面的代码可以解释,SendMessage 必须要等到消息响应函数结束,才继续执行. #define USER_MSG WM_USER+1 /*使用SendMessage的例子 程序执行的步骤 */ void fun() { // 第一步 SendMessage(hWnd,USER…
BOOL   PostMessage(          HWND   hWnd,             //   handle   of   destination   window          UINT   Msg,               //   message   to   post          WPARAM   wParam,     //   first   message   parameter          LPARAM   lParam       //…
    转自:http://blog.csdn.net/xt_xiaotian/article/details/2778689 本文将使用C++语言,在MFC框架的配合下给出PostMessage.SendMessage等的使用方式与使用不当造成的后果(讨论均针对自定义的消息进行).如有什么错误,欢迎指正. 写过Windows程序的同学都知道PostMessage.SendMessage的区别,PostMessage函数调用发送之后,立即返回,不等待消息处理完成.而SendMessage则让调用…
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 表示的是消息被处理后…
PostMessage只负责将消息放到消息队列中,不确定何时及是否处理,相当于异步操作,执行后马上返回SendMessage要等到受到消息处理的返回码(DWord类型)后才继续,相当于同步操作,一直在等待,必须等到消息被处理后才会返回.SendMessageTimeout 函数,是会有一个超时的操作,防止操作一直没返回,当前程序挂起,这个函数有几个参数: LRESULT SendMessageTimeout(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM I…