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(    …
1       故障现象 故障现象1:能够收到SendMessage()发出的消息,但收不到PostMessage()发出的消息. 故障现象2:能够收到PostMessage()发出的消息,但收不到SendMessage()发出的消息. 2       两个比喻 从发送端来说: SendMessage()好比电信系统提供通话服务. 如果对方占线,立即返回. 如果对方不占线,就保持呼叫→接收端接听→通话→挂断.在挂断之前,发送端处于阻塞状态,不可以干别的事. 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…
 深入解析SendMessage.PostMessage 本文将使用C++语言,在MFC框架的配合下给出PostMessage.SendMessage等的使用方式与使用不当造成的后果(讨论均针对自定义的消息进行).如有什么错误,欢迎指正. 写过Windows程序的同学都知道PostMessage.SendMessage的区别,PostMessage函数调用发送之后,立即返回,不等待消息处理完成.而SendMessage则让调用的线程处于阻塞(BLOCk)状态,直到消息处理完成. 正由于这两个函数…
首先你会发现keybd_event函数中是没有窗口句柄作为参数的,好奇的你一定会觉得很奇怪,那是因为,keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)才可以,但是如果模拟的按键正好也是某个窗口的全局热键消息,那该窗口也能接收到的 而SendMessage .PostMessage是对指定句柄窗口都其作用的,对于做一些一外挂是非常有用的.例如可以做成这样的效果:即用SendMessage/PostMessage在某一个窗口模拟动作,而同时自己可以在其他窗口做其他事情,互不影…
1.自定义消息ID. #define WM_MY_MESSAGE (WM_USER+100)         WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件的消息会占用一部分. 2. 定义消息处理函数. 消息处理函数为消息目标类的成员函数.首先应该在.h 文件中声明.这里以主窗口类为例,主窗口类名 CMainDialog,则首先在CMainDialog.h声明消息处理函数. protected: afx_msg LRESULT OnMyMessage(…
原文 C#进程间通信--API传递参数(SendMessage)  我们不仅可以传递系统已经定义好的消息,还可以传递自定义的消息(只需要发送消息端和接收消息端对自定义的消息值统一即可).下面的发送和接收端同时演示了系统消息和自定义的消息.消息统一采用4位16进制的数. 1.系统消息使用的是0x0100(WM_KEYDOWN):0x0000--0x0400是系统自定义的消息,其中0x0000为WM_NULL,0x0400为WM_USER.0x0400以后的数值我们可以作为自定义的消息值.(见附录)…
键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件.那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制. 当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机.如何区别…
对wsprintf  API函数的理解: int wsprintf ( LPTSTR lpOut, // pointer to buffer for output  LPCTSTR lpFmt, // pointer to format-control string  ... // optional arguments ); 第一个参数是输出目的缓冲区,第二个参数是要往缓冲区里面放的内容, 如果参数二中有%s,%x等格式化字符串的符号,就需要在后面加上格式化 字符串的实际内容,即wsprintf…
参数发送进程: CString csCmd=AfxGetApp()->m_lpCmdLine; if (!csCmd.IsEmpty()) { pWndPrev->SendMessage(MYWM_NEWPARAM,0,(LPARAM)(&csCmd)); } 参数接受进程: CString csCmd=_T(""); CString* pStr = (CString*) lParam; ASSERT(pStr!=NULL); csCmd = *pStr; 经过测试…
Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回. 函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam): 参数: hWnd:其窗口程序将接收消息的窗口的句柄.如果此参数为HWND_BRO…
Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回. 函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam): 参数: hWnd:其窗口程序将接收消息的窗口的句柄.如果此参数为HWND_BRO…
iPhone应用开发中关于NSRunLoop的概述是本文要介绍的内容,NSRunLoop是一种更加高明的消息处理模式,他就高明在对消息处理过程进行了更好的抽象和封装,这样才能是的你不用处理一些很琐碎很低层次的具体消息的处理,在NSRunLoop中每一个消息就被打包在input source或者是timer source中了,来看详细内容.1.什么是NSRunLoop我们会经常看到这样的代码: - (IBAction)start:(id)sender { pageStillLoading = YE…
简单的说run loop是事件驱动的一个大循环,如下代码所示int main(int argc, char * argv[]) {     //程序一直运行状态     while (AppIsRunning) {          //睡眠状态,等待唤醒事件          id whoWakesMe = SleepForWakingUp();          //得到唤醒事件          id event = GetEvent(whoWakesMe);          //开始处…
SynchronizationContext -MSDN 很让人失望 我不知道为什么,目前在.Net下关于这个类只有很少的资料.MSDN文档也只有很少的关于如何使用SynchronizationContext的资料.最开始的时候,我不得不说我在理解为什么有这个类以及怎么使用这个类上经历了一段困难的时间.通过阅读大量的相关资料,我最终搞明白了这个类的目的以及它应该如何去使用.我决定写这篇文章来帮助其他开发者理解如何使用这个类,这个类能干嘛以及它不能干嘛. 使用SynchronizationCont…
/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问…
看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件.临界区.Synchronize.WaitFor……) 先说一下RTL和VCL RTL(Run-Time library),运行时库,包括System.SysUtils.Math三个单元,提供的函数与语言.编译器.操作系统及进程有关 RTL提供类之间继承于 TObject 和 RTL内部的类 VCL(Visual Component Library),可视化组件库,包括Graphics.classes.Control…
VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件.那么我们怎样才能用VB来写一个程…
SynchronizationContext -MSDN 很让人失望 我不知道为什么,目前在.Net下关于这个类只有很少的资料.MSDN文档也只有很少的关于如何使用SynchronizationContext的资料.最开始的时候,我不得不说我在理解为什么有这个类以及怎么使用这个类上经历了一段困难的时间.通过阅读大量的相关资料,我最终搞明白了这个类的目的以及它应该如何去使用.我决定写这篇文章来帮助其他开发者理解如何使用这个类,这个类能干嘛以及它不能干嘛. 使用SynchronizationCont…
在对数据库的操作时,有时要用一个子线程来进行后台的数据操作.比如说数据备份,转档什么的.在主窗口还能同是进行其它操作.而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上(可视),同时进行日志处理等.我用的是下面的方法: [1]用到的API函数:RegisterWindowsMessage----------------------函数功能:该函数定义一个新的窗口消息,该消息确保在系统中是唯一的.返回的消息值可在调用函数SendMessage或PostMessage…
采用VSTO或者Shared Add-in等技术开发Excel插件,其实是在与Excel提供的API在打交道,Excel本身的组件大多数都是COM组件,也就是说通过Excel PIA来与COM进行交互.这其中会存在一些问题,这些问题如果处理不好,通常会导致在运行的时候会抛出难以调试的COM异常,从而导致我们开发出的Excel插件的不稳定. 和普通的WinForm程序一样,Excel也是一种STA(Single Thread Apartment)线程的应用程序,Excel插件是寄宿在Excel中运…
NSRunLoop 概述和原理 1.什么是NSRunLoop? 我们会经常看到这样的代码: - (IBAction)start:(id)sender { pageStillLoading = YES; [NSThread detachNewThreadSelector:@selector(loadPageInBackground:)toTarget:self withObject:nil]; [progress setHidden:NO]; while (pageStillLoading) {…
上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32Test.h #pragma once #include <windows.h> #include <atltypes.h> #include <tchar.h> //资源ID #define ID_BUTTON_DRAW 1000 #define ID_BUTTON_SW…