windows消息大全及钩子介绍
第5讲 Windows消息机制及HOOK应用

HOOK管理的关键函数 SetWindowsHookEx UnhookWindowsHookEx CallNextHookEx
第5讲 Windows消息机制及HOOK应用
内容 事件/消息驱动 HOOK机制
1. Windows事件驱动机制
DOS程序的特点 顺序驱动和过程驱动
Windows程序的特点 操作无序 事件驱动 以消息为中心
WINDOWS消息处理过程
队列消息 基本上是用户输入的结果 击键(如WM_KEYDOWN和WM_KEYUP消息) 击键产生的字(WM_CHAR) 鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN) 时钟消息(WM_TIMER) 更新消息(WM_PAINT) 退出消息(WM_QUIT)
消息处理程序C
消息处理程序B
HOOK概念
消息处理程序C 消息处理程序A
消息处理程序B
C就是HOOK程序。即钩子 程序
C → B → A: 消息处理函数链
HOOK本质 一段用于处理系统消息的程序,这段程序由用户编写,挂入该消息的处理函数链中,被 OS自动调用 。
HOOK技术典型应用 木马程序【特征:平时潜伏,消息触发】 屏幕抓词、进程监控、垃圾邮件过滤、软件界面定制、……
while(ParentWnd !=NULL) { glhTargetWnd=ParentWnd; ParentWnd=GetParent(glhTargetWnd); } GetWindowText(glhTargetWnd,szCaption,100); //取目标窗口标题
Hook课件

基本概念
• 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以 在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口 可以是其他进程所创建的。当消息到达后,在目标窗口处理函数 之前处理它。钩子机制允许应用程序截获处理window消息或特定 事件。 • 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入 系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序 就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即 可以加工处理(改变)该消息,也可以不作处理而继续传递该消 息,还可以强制结束消息的传递。
HINSTANCE hMod, // 应用程序实例的句柄。标识包含lpfn所指的 子程的DLL。 // 如果dwThreadId 标识当前进程创建的一个线程, // 而且子程代码位于当前进程,hMod必须为NULL。 // 可以很简单的设定其为本应用程序的实例句柄。 DWORD dwThreadId // 与安装的钩子子程相关联的线程的标识符。 // 如果为0,钩子子程与所有的线程关联,即为全局钩子。 ); 函数成功则返回钩子子程的句柄,失败返回NULL。 以上所说的钩子子程与线程相关联是指在一钩子链表中发给该线程的消息同 时发送给钩子子程,且被钩子子程先处理。
(Hook procedure)
可以设定定的值
指定要 Monitor 所有的 thread
WH_KEYBOARD: 设定当目标收到 Keyboard Message 之前,呼叫你的 function
系统如何应对 SetWindowsHookEx?
BOOL WINAPI SetDIPSHook(DWORD dwThreadId){
•
• • • • •
•
钩子函数讲解

钩⼦函数讲解钩⼦,⼏乎所有的键盘监控程序都使⽤钩⼦机制来捕获系统的击键信息。
⼤家知道,在DOS操作系统下,如果要截获某种系统功能,可以在编程中采取截获中断的办法,⽐如要获取击键信息,可以使⽤9号中断调⽤,要获取应⽤程序对⽂件操作功能的调⽤可以截获21号中断。
DOS下截获中断的⽅法是这样的随意和⽅便,不论是驱动程序还是应⽤程序都可以操作,这样就给⼀些恶意程序留下了可乘之机,对系统的安全造成了极⼤的隐患。
⽽在Windows 2000下就不同了,Windows 2000采⽤了保护模式,在保护模式下的中断描述符表是受系统保护的,应⽤程序是不可能再通过修改中断向量来截获系统中断了。
这在提供了更⾼安全性的同时,实际上对应⽤程序在调⽤底层功能⽅⾯造成了很⼤的不便。
不过,Windows采取了⼀些变通的⽅法,将⼀些系统的底层调⽤封装在了⾃⼰的API函数中,通过向⽤户提供接⼝使⽤户可以受限的使⽤⼀些系统调⽤。
钩⼦,⼏乎所有的键盘监控程序都使⽤钩⼦机制来捕获系统的击键信息。
⼤家知道,在DOS操作系统下,如果要截获某种系统功能,可以在编程中采取截获中断的办法,⽐如要获取击键信息,可以使⽤9号中断调⽤,要获取应⽤程序对⽂件操作功能的调⽤可以截获21号中断。
DOS下截获中断的⽅法是这样的随意和⽅便,不论是驱动程序还是应⽤程序都可以操作,这样就给⼀些恶意程序留下了可乘之机,对系统的安全造成了极⼤的隐患。
⽽在Windows 2000下就不同了,Windows 2000采⽤了保护模式,在保护模式下的中断描述符表是受系统保护的,应⽤程序是不可能再通过修改中断向量来截获系统中断了。
这在提供了更⾼安全性的同时,实际上对应⽤程序在调⽤底层功能⽅⾯造成了很⼤的不便。
不过,Windows采取了⼀些变通的⽅法,将⼀些系统的底层调⽤封装在了⾃⼰的API函数中,通过向⽤户提供接⼝使⽤户可以受限的使⽤⼀些系统调⽤。
TIPS:钩⼦是Windows的消息处理机制中提供的⼀个监视点,应⽤程序可以在这⾥安装⼀个过滤程序,这样就可以在系统中的消息流到达⽬的程序前监控它们。
钩子函数捕捉键盘消息

利用钩子函数来捕捉键盘响应的windows应用程序一:引言:你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数。
因此本文将对钩子函数的相关知识进行阐述。
当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述。
(本文的程序为vc6.0的开发环境,语言是:C和win32 api)。
二:钩子概述:微软的windowsX操作系统是建立在事件驱动的机制上的,也就是通过消息传递来实现。
而钩子在windows操作系统中,是一种能在事件(比如:消息、鼠标激活、键盘响应)到达应用程序前中途接获事件的机制。
而且,钩子函数还可以通过修改、丢弃等手段来对事件起作用。
Windows 有两种钩子,一种是特定线程钩子(Thread specific hooks),一种是全局系统钩子(Systemwide hooks)。
特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。
无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx ()来设置钩子的。
对于特定线程钩子,钩子的函数既可以是包含在一个.exe也可以是一个.dll。
但是对于一个全局系统钩子,钩子函数必须包含在独立的dll中,因此,当我们要捕捉键盘响应时,我们必须创建一个动态链接库。
但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。
由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。
鉴于这一点,在windows ce中对钩子程序并不支持。
windows消息大全

Windows消息大全什么是Windows消息?Windows消息是在Windows操作系统中用于应用程序之间进行通信的一种机制。
通过发送和接收消息,应用程序可以向其他应用程序发送命令、请求数据或通知一些事件的发生。
Windows操作系统提供了一系列的系统消息,同时也允许应用程序自定义和发送消息。
系统消息Windows操作系统中的系统消息由操作系统负责发送和处理,这些消息通常涉及到操作系统的各个方面。
下面是一些常见的系统消息:1.WM_CREATE:当窗口被创建时发送。
2.WM_DESTROY:当窗口被销毁时发送。
3.WM_PAINT:当窗口需要绘制时发送。
4.WM_CLOSE:当用户关闭窗口时发送。
5.WM_QUIT:当应用程序需要退出时发送。
6.WM_SIZE:当窗口大小改变时发送。
7.WM_MOUSEMOVE:当鼠标移动时发送。
8.WM_KEYDOWN:当按下键盘上的一个键时发送。
这只是一小部分系统消息的例子,Windows操作系统中还有很多其他的系统消息可供使用。
自定义消息除了系统消息,应用程序还可以自定义消息以实现应用程序之间的通信。
自定义消息通常基于用户定义的消息号。
下面是一些自定义消息的例子:1.WM_MY_MESSAGE1:用户自定义的消息1。
2.WM_MY_MESSAGE2:用户自定义的消息2。
3.WM_MY_MESSAGE3:用户自定义的消息3。
自定义消息的消息号必须在WM_USER之后,以避免与系统消息冲突。
消息参数除了发送消息本身外,应用程序还可以使用参数来传递额外的信息。
参数通常包含在消息的wParam和lParam字段中。
•wParam表示一个无符号的整数,用于传递一些简单的数值信息。
•lParam通常表示一个指针,指向一些复杂的数据结构。
应用程序可以根据消息的含义和需要来使用这些参数。
如何发送和接收消息在Windows操作系统中,应用程序可以使用函数来发送和接收消息。
Windows窗口消息大全

Window s窗口消息大全#消息,就是指Win dows发出的一个通知,告诉应用程序某个事情发生了。
例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Wind ows发送一个消息给应用程序。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。
例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。
这个记录类型叫做TMs g,#它在Wind ows单元中是这样声明的:#type#TMsg = packed record#hwnd: HWND; / /窗口句柄#messag e: UINT; / /消息常量标识符#wParam: WPARAM ; // 32位消息的特定附加信息#lParam: LPARAM ; // 32位消息的特定附加信息#time: DWORD; / /消息创建时的时间#pt: TPoint; / /消息创建时的鼠标位置#end;#消息中有什么?#是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:#hwnd 32位的窗口句柄。
窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。
#messag e 用于区别其他消息的常量值,这些常量可以是Wind ows单元中预定义的常量,也可以是自定义的常量。
#wParam通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
#lParam通常是一个指向内存中数据的指针。
由于W P a r a m、l P a r a m和P o i n t e r都是3 2位的,#因此,它们之间可以相互转换。
WM_NUL L = 0x0000;WM_CRE ATE = 0x0001;#应用程序创建一个窗口WM_DES TROY= 0x0002;#一个窗口被销毁WM_MOV E = 0x0003;#移动一个窗口WM_SIZ E = 0x0005;#改变一个窗口的大小WM_ACT IVATE = 0x0006;#一个窗口被激活或失去激活状态;WM_SET FOCUS = 0x0007;#获得焦点后WM_KIL LFOCU S = 0x0008;#失去焦点WM_ENA BLE = 0x000A;#改变enab le状态WM_SET REDRA W = 0x000B;#设置窗口是否能重画WM_SET TEXT= 0x000C;#应用程序发送此消息来设置一个窗口的文本WM_GET TEXT= 0x000D;#应用程序发送此消息来复制对应窗口的文本到缓冲区WM_GET TEXTL ENGTH = 0x000E;#得到与一个窗口有关的文本的长度(不包含空字符)WM_PAI NT = 0x000F;#要求一个窗口重画自己WM_CLO SE = 0x0010;#当一个窗口或应用程序要关闭时发送一个信号WM_QUE RYEND SESSI ON = 0x0011;#当用户选择结束对话框或程序自己调用Exit Windo ws函数WM_QUI T = 0x0012;#用来结束程序运行或当程序调用po stqui tmess age函数WM_QUE RYOPE N = 0x0013;#当用户窗口恢复以前的大小位置时,把此消息发送给某个图标WM_ERA SEBKG ND = 0x0014;#当窗口背景必须被擦除时(例在窗口改变大小时)WM_SYS COLOR CHANG E = 0x0015;#当系统颜色改变时,发送此消息给所有顶级窗口WM_END SESSI ON = 0x0016;#当系统进程发出WM_Q UERYE NDSES SION消息后,此消息发送给应用程序,#通知它对话是否结束WM_SYS TEMER ROR = 0x0017;WM_SHO WWIND OW = 0x0018;#当隐藏或显示窗口是发送此消息给这个窗口WM_ACT IVATE APP = 0x001C;#发此消息给应用程序哪个窗口是激活的,哪个是非激活的;WM_FON TCHAN GE = 0x001D;#当系统的字体资源库变化时发送此消息给所有顶级窗口WM_TIM ECHAN GE = 0x001E;#当系统的时间变化时发送此消息给所有顶级窗口WM_CAN CELMO DE = 0x001F;#发送此消息来取消某种正在进行的摸态(操作)WM_SET CURSO R = 0x0020;#如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口WM_MOU SEACT IVATE = 0x0021;#当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口WM_CHI LDACT IVATE = 0x0022;#发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小WM_QUE UESYN C = 0x0023;#此消息由基于计算机的训练程序发送,通过WH_J OURNA LPALY BACK的hook程序#分离出用户输入消息WM_GET MINMA XINFO = 0x0024;#此消息发送给窗口当它将要改变大小或位置;WM_PAI NTICO N = 0x0026;#发送给最小化窗口当它图标将要被重画WM_ICO NERAS EBKGN D = 0x0027;#此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画WM_NEX TDLGC TL = 0x0028;#发送此消息给一个对话框程序去更改焦点位置WM_SPO OLERS TATUS = 0x002A;#每当打印管理列队增加或减少一条作业时发出此消息WM_DRA WITEM = 0x002B;#当butto n,combob ox,listbo x,menu的可视外观改变时发送#此消息给这些空件的所有者WM_MEA SUREI TEM = 0x002C;#当butto n, combobox, list box, list view contro l, or menu item 被创建时#发送此消息给控件的所有者WM_DEL ETEIT EM = 0x002D;#当the list box 或combobox 被销毁或当某些项被删除通过LB_DELET ESTRI NG, LB_RES ETCON TENT, CB_DEL ETEST RING, or CB_RES ETCON TENT消息WM_VKE YTOIT EM = 0x002E;#此消息有一个LBS_W ANTKE YBOAR DINPU T风格的发出给它的所有者来响应WM_KE YDOWN 消息WM_CHA RTOIT EM = 0x002F;#此消息由一个LBS_W ANTKE YBOAR DINPU T风格的列表框发送给他的所有者来响应WM_CHAR 消息WM_SET FONT= 0x0030;#当绘制文本时程序发送此消息得到控件要用的颜色WM_GET FONT= 0x0031;#应用程序发送此消息得到当前控件绘制文本的字体WM_SET HOTKE Y = 0x0032;#应用程序发送此消息让一个窗口与一个热键相关连WM_GET HOTKE Y = 0x0033;#应用程序发送此消息来判断热键与某个窗口是否有关联WM_QUE RYDRA GICON = 0x0037;#此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标WM_COM PAREI TEM = 0x0039;#发送此消息来判定com bobox或list box新增加的项的相对位置WM_GET OBJEC T = 0x003D;WM_COM PACTI NG = 0x0041;#显示内存已经很少了WM_WIN DOWPO SCHAN GING= 0x0046;#发送此消息给那个窗口的大小和位置将要被改变时,来调用set windo wpos函数或其它窗口管理函数WM_WIN DOWPO SCHAN GED = 0x0047;#发送此消息给那个窗口的大小和位置已经被改变时,来调用set windo wpos函数或其它窗口管理函数WM_POW ER = 0x0048;(适用于16位的wind ows)#当系统将要进入暂停状态时发送此消息WM_COP YDATA = 0x004A;#当一个应用程序传递数据给另一个应用程序时发送此消息WM_CAN CELJO URNAL = 0x004B;#当某个用户取消程序日志激活状态,提交此消息给程序WM_NOT IFY = 0x004E;#当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口WM_INP UTLAN GCHAN GEREQ UEST= 0x0050;#当用户选择某种输入语言,或输入语言的热键改变WM_INP UTLAN GCHAN GE = 0x0051;#当平台现场已经被改变后发送此消息给受影响的最顶级窗口WM_TCA RD = 0x0052;#当程序已经初始化win dows帮助例程时发送此消息给应用程序WM_HEL P = 0x0053;#此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就#发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口WM_USE RCHAN GED = 0x0054;#当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体#设置信息,在用户更新设置时系统马上发送此消息;WM_NOT IFYFO RMAT= 0x0055;#公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用A NSI还是UNICO DE结构#在WM_NO TIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信WM_CON TEXTM ENU = 0x007B;#当用户某个窗口中点击了一下右键就发送此消息给这个窗口WM_STY LECHA NGING = 0x007C;#当调用SET WINDO WLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口WM_STY LECHA NGED= 0x007D;#当调用SET WINDO WLONG函数一个或多个窗口的风格后发送此消息给那个窗口WM_DIS PLAYC HANGE = 0x007E;#当显示器的分辨率改变后发送此消息给所有的窗口WM_GET ICON= 0x007F;#此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;WM_SET ICON= 0x0080;#程序发送此消息让一个新的大图标或小图标与某个窗口关联;WM_NCC REATE = 0x0081;#当某个窗口第一次被创建时,此消息在WM_CREA TE消息发送前发送;WM_NCD ESTRO Y = 0x0082;#此消息通知某个窗口,非客户区正在销毁WM_NCC ALCSI ZE = 0x0083;#当某个窗口的客户区域必须被核算时发送此消息WM_NCH ITTES T = 0x0084;//移动鼠标,按住或释放鼠标时发生WM_NCP AINT= 0x0085;#程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;WM_NCA CTIVA TE = 0x0086;#此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态;WM_GET DLGCO DE = 0x0087;#发送此消息给某个与对话框程序关联的控件,widdow s控制方位键和TAB键使输入进入此控件#通过响应WM_GETD LGCOD E消息,应用程序可以把他当成一个特殊的输入控件并能处理它WM_NCM OUSEM OVE = 0x00A0;#当光标在一个窗口的非客户区内移动时发送此消息给这个窗口//非客户区为:窗体的标题栏及窗的边框体WM_NCL BUTTO NDOWN = 0x00A1;#当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息WM_NCL BUTTO NUP = 0x00A2;#当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;WM_NCL BUTTO NDBLC LK = 0x00A3;#当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息WM_NCR BUTTO NDOWN = 0x00A4;#当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCR BUTTO NUP = 0x00A5;#当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCR BUTTO NDBLC LK = 0x00A6;#当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息WM_NCM BUTTO NDOWN = 0x00A7;#当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCM BUTTO NUP = 0x00A8;#当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCM BUTTO NDBLC LK = 0x00A9;#当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息WM_KEY FIRST = 0x0100;WM_KEY DOWN= 0x0100;#//按下一个键WM_KEY UP = 0x0101;#//释放一个键WM_CHA R = 0x0102;#//按下某键,并已发出WM_KEYD OWN, WM_KEY UP消息WM_DEA DCHAR = 0x0103;#当用tran slate messa ge函数翻译WM_K EYUP消息时发送此消息给拥有焦点的窗口WM_SYS KEYDO WN = 0x0104;#当用户按住A LT键同时按下其它键时提交此消息给拥有焦点的窗口;WM_SYS KEYUP = 0x0105;#当用户释放一个键同时A LT 键还按着时提交此消息给拥有焦点的窗口WM_SYS CHAR= 0x0106;#当WM_SY SKEYD OWN消息被TRAN SLATE MESSA GE函数翻译后提交此消息给拥有焦点的窗口WM_SYS DEADC HA R = 0x0107;#当WM_SY SKEYD OWN消息被TRAN SLATE MESSA GE函数翻译后发送此消息给拥有焦点的窗口WM_KEY LAST= 0x0108;WM_INI TDIAL OG = 0x0110;#在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务WM_COM MAND= 0x0111;#当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译WM_SYS COMMA ND = 0x0112;#当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息WM_TIM ER = 0x0113; //发生了定时器事件WM_HSC ROLL= 0x0114;#当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件WM_VSC ROLL= 0x0115;#当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件 WM_INI TMENU = 0x0116;#当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单WM_INI TMENU POPUP = 0x0117;#当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部WM_MEN USELE CT = 0x011F;#当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)WM_MEN UCHAR = 0x0120;#当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;WM_ENT ERIDL E = 0x0121;#当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待WM_MEN URBUT TONUP = 0x0122;WM_MEN UDRAG = 0x0123;WM_MEN UGETO BJECT = 0x0124;WM_UNI NITME NUPOP UP = 0x0125;WM_MEN UCOMM AND = 0x0126;WM_CHA NGEUI STATE = 0x0127;WM_UPD ATEUI STATE = 0x0128;WM_QUE RYUIS TATE= 0x0129;WM_CTL COLOR MSGBO X = 0x0132;#在windo ws绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色WM_CTL COLOR EDIT= 0x0133;#当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色WM_CTL COLOR LISTB OX = 0x0134;#当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色WM_CTL COLOR BTN = 0x0135;#当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色WM_CTL COLOR DLG = 0x0136;#当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色WM_CTL COLOR SCROL LBAR=0x0137;#当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色WM_CTL COLOR STATI C = 0x0138;#当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色WM_MOU SEFIR ST = 0x0200;WM_MOU SEMOV E = 0x0200;#// 移动鼠标WM_LBU TTOND OWN = 0x0201;#//按下鼠标左键WM_LBU TTONU P = 0x0202;#//释放鼠标左键WM_LBU TTOND BLCLK = 0x0203;#//双击鼠标左键WM_RBU TTOND OW N = 0x0204;#//按下鼠标右键WM_RBU TTONU P = 0x0205;#//释放鼠标右键WM_RBU TTOND BLCLK = 0x0206;#//双击鼠标右键WM_MBU TTOND OW N = 0x0207;#//按下鼠标中键WM_MBU TTONU P = 0x0208;#//释放鼠标中键WM_MBU TTOND BLCLK = 0x0209;#//双击鼠标中键WM_MOU SEWHE EL = 0x020A;#当鼠标轮子转动时发送此消息个当前有焦点的控件WM_MOU SELAS T = 0x020A;WM_PAR ENTNO TIFY= 0x0210;#当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口WM_ENT ERMEN ULOOP = 0x0211;#发送此消息通知应用程序的主窗口t hat已经进入了菜单循环模式WM_EXI TMENU LOOP= 0x0212;#发送此消息通知应用程序的主窗口t hat已退出了菜单循环模式WM_NEX TMENU = 0x0213;WM_SIZ ING = 532;#当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置也可以修改他们WM_CAP TUREC HANGE D = 533;#发送此消息给窗口当它失去捕获的鼠标时;WM_MOV ING = 534;#当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们;WM_POW ERBRO ADCAS T = 536;#此消息发送给应用程序来通知它有关电源管理事件;WM_DEV ICECH ANGE= 537;#当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序WM_IME_STAR TCOMP OSITI ON = 0x010D;WM_IME_ENDC OMPOS ITION = 0x010E;WM_IME_COMP OSITI ON = 0x010F;WM_IME_KEYL AST = 0x010F;WM_IME_SETC ONTEX T = 0x0281;WM_IME_NOTI FY = 0x0282;WM_IME_CONT ROL = 0x0283;WM_IME_COMP OSITI ONFUL L = 0x0284;WM_IME_SELE CT = 0x0285;WM_IME_CHAR = 0x0286;WM_IME_REQU EST = 0x0288;WM_IME_KEYD OWN = 0x0290;WM_IME_KEYU P = 0x0291;WM_MDI CREAT E = 0x0220;#应用程序发送此消息给多文档的客户窗口来创建一个MDI子窗口WM_MDI DESTR OY = 0x0221;#应用程序发送此消息给多文档的客户窗口来关闭一个MDI子窗口WM_MDI ACTIV ATE = 0x0222;#应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MD I子窗口,当客户窗口收到此消息后,它发出WM_MDIAC TIVE消息给MDI子窗口(未激活)激活它;WM_MDI RESTO RE = 0x0223;#程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小WM_MDI NEXT= 0x0224;#程序发送此消息给MDI客户窗口激活下一个或前一个窗口WM_MDI MAXIM IZE = 0x0225;#程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;WM_MDI TILE= 0x0226;#程序发送此消息给MDI客户窗口以平铺方式重新排列所有MD I子窗口WM_MDI CASCA DE = 0x0227;#程序发送此消息给MDI客户窗口以层叠方式重新排列所有MD I子窗口WM_MDI ICONA RRANG E = 0x0228;#程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口WM_MDI GETAC TIVE= 0x0229;#程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄WM_MDI SETME NU = 0x0230;#程序发送此消息给MDI客户窗口用MD I菜单代替子窗口的菜单WM_ENT ERSIZ EMOVE = 0x0231;WM_EXI TSIZE MOVE= 0x0232;WM_DRO PFILE S = 0x0233;WM_MDI REFRE SHMEN U = 0x0234;WM_MOU SEHOV ER = 0x02A1;WM_MOU SELEA VE = 0x02A3;WM_CUT = 0x0300;#程序发送此消息给一个编辑框或co mbobo x来删除当前选择的文本WM_COP Y = 0x0301;#程序发送此消息给一个编辑框或co mbobo x来复制当前选择的文本到剪贴板WM_PAS TE = 0x0302;#程序发送此消息给edi tcont rol或c ombob ox从剪贴板中得到数据WM_CLE A R = 0x0303;#程序发送此消息给edi tcont rol或c ombob ox清除当前选择的内容;WM_UND O = 0x0304;#程序发送此消息给edi tcont rol或c ombob ox撤消最后一次操作WM_REN DERFO RMAT= 0x0305;WM_REN DERAL LFORM ATS = 0x0306;WM_DES TROYC LIPBO A RD = 0x0307;#当调用ENP TYCLI PBOAR D函数时发送此消息给剪贴板的所有者WM_DRA WCLIP BOARD = 0x0308;#当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAI NTCLI PBOAR D = 0x0309;#当剪贴板包含CF_OW NERDI PLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSC ROLLC LIPBO ARD = 0x030A;WM_SIZ ECLIP BOARD = 0x030B;#当剪贴板包含CF_OW NERDI PLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASK CBFOR MATNA ME = 0x030C;#通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_O WNERD ISPLA Y格式的剪贴板的名字WM_CHA NGECB CHAIN = 0x030D;#当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSC ROLLC LIPBO ARD = 0x030E;#此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含C FOWNE RDISP ALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_QUE RYNEW PALET TE = 0x030F;#此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板WM_PAL ETTEI SCHAN GING=0x0310;#当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序WM_PAL ETTEC HANGE D = 0x0311;#此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板WM_HOT KEY = 0x0312;#当用户按下由REGIS TERHO TKEY函数注册的热键时提交此消息WM_PRI NT = 791;#应用程序发送此消息仅当WINDO WS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;WM_PRI NTCLI ENT = 792;WM_HAN DHELD FIRST = 856;WM_HAN DHELD LAST= 863;WM_PEN WINFI RST = 0x0380;WM_PEN WINLA ST = 0x038F;WM_COA LESCE_FIRS T = 0x0390;WM_COA LESCE_LAST = 0x039F;WM_DDE_FIRS T = 0x03E0;WM_DDE_INIT IATE= WM_DDE_FIRS T + 0;#一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERM INATE = WM_DDE_FIRS T + 1;#一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;WM_DDE_ADVI SE = WM_DDE_FIRS T + 2;#一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它WM_DDE_UNAD VISE= WM_DDE_FIRS T + 3;#一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项WM_DDE_ACK= WM_DDE_FIRS T + 4;#此消息通知一个DDE(动态数据交换)程序已收到并正在处理W M_DDE_POKE, WM_DDE_EXEC UTE, WM_DDE_DATA, WM_DDE_ADVI SE, WM_DDE_UNAD VISE,or WM_DDE_INIT IAT消息WM_DDE_DATA = WM_DDE_FIRS T + 5;#一个DDE服务程序提交此消息给D DE客户程序来传递个一数据项给客户或通知客户的一条可用数据项WM_DDE_REQU EST = WM_DDE_FIRS T + 6;#一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;WM_DDE_POKE = WM_DDE_FIRS T + 7;#一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_D DE_AC K消息提示是否它接收这个数据项;WM_DDE_EXEC UTE = WM_DDE_FIRS T + 8;#一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_D DE_AC K消息来作回应;WM_DDE_LAST = WM_DDE_FIRS T + 8;WM_APP = 0x8000;WM_USE R = 0x0400;#此消息能帮助应用程序自定义私有消息;。
用VB6编的截获Windows消息的钩子的源码

Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP WM_RBUTTONDBLCLK = &H206
再例如:键盘的敲击动作,在别的地方敲击键盘,并没有在自己的Form中敲击键盘,怎么才能获得按键的具体键值呢?
对单片机有了解的朋友都知道,鼠标和键盘的操作都是利用的是“中断”触发事件来完成的,那么当系统“中断”的时候,就会发出消息给操作系统,而这些消息就是Windows全局消息。
If hHook = 0 Then
hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf HookProc, App.hInstance, 0)
End If
End Sub
Public Sub FreeHook()
If hHook <> 0 Then
模块代码:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
HookProc = 0 '令待完成的動作繼續完成
'End If
End If
If wParam = WM_LBUTTONDOWN Then
Debug.Print "l"
windows消息大全及钩子介绍

windows消息大全及钩子介绍windows消息大全 (2)声明 (2)消息中有什么? (2)通知消息 (23)按扭 (23)组合框 (23)编辑框 (24)列表框 (24)Windows消息中的虚拟键列表 (25)Windows消息中的虚拟键 (25)DirectInput中的虚拟键 (27)HOOK专题 (29)基本概念 (29)运行机制 (30)1、钩子链表和钩子子程: (30)2、钩子的安装与释放: (31)3、一些运行机制: (34)4、系统钩子与线程钩子: (35)钩子类型 (35)1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks (36)2、WH_CBT Hook (36)3、WH_DEBUG Hook (37)4、WH_FOREGROUNDIDLE Hook (37)5、WH_GETMESSAGE Hook (37)6、WH_JOURNALPLAYBACK Hook (37)7、WH_JOURNALRECORD Hook (38)8、WH_KEYBOARD Hook (38)9、WH_KEYBOARD_LL Hook (38)10、WH_MOUSE Hook (38)11、WH_MOUSE_LL Hook (38)12、WH_MSGFILTER和WH_SYSMSGFILTER Hooks (39)13、WH_SHELL Hook (39)windows消息大全消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。
例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。
例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。
这个记录类型叫做TMsg,声明它在Windows单元中是这样声明的:typeTMsg=packed recordhwnd:HWND;//窗口句柄message:UINT;//消息常量标识符wParam:WPARAM;//32位消息的特定附加信息lParam:LPARAM;//32位消息的特定附加信息time:DWORD;//消息创建时的时间pt:TPoint;//消息创建时的鼠标位置end;消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd32位的窗口句柄。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
windows消息大全及钩子介绍windows消息大全 (2)声明 (2)消息中有什么? (2)通知消息 (23)按扭 (23)组合框 (23)编辑框 (24)列表框 (24)Windows消息中的虚拟键列表 (25)Windows消息中的虚拟键 (25)DirectInput中的虚拟键 (27)HOOK专题 (29)基本概念 (29)运行机制 (30)1、钩子链表和钩子子程: (30)2、钩子的安装与释放: (31)3、一些运行机制: (33)4、系统钩子与线程钩子: (34)钩子类型 (35)1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks (35)2、WH_CBT Hook (35)3、WH_DEBUG Hook (36)4、WH_FOREGROUNDIDLE Hook (36)5、WH_GETMESSAGE Hook (36)6、WH_JOURNALPLAYBACK Hook (36)7、WH_JOURNALRECORD Hook (37)8、WH_KEYBOARD Hook (37)9、WH_KEYBOARD_LL Hook (37)10、WH_MOUSE Hook (37)11、WH_MOUSE_LL Hook (37)12、WH_MSGFILTER 和WH_SYSMSGFILTER Hooks (38)13、WH_SHELL Hook (38)windows消息大全消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。
例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。
例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。
这个记录类型叫做TMsg,声明它在Windows单元中是这样声明的:typeTMsg = packed recordhwnd: HWND; / /窗口句柄message: UINT; / /消息常量标识符wParam: WPARAM ; // 32位消息的特定附加信息lParam: LPARAM ; // 32位消息的特定附加信息time: DWORD; / /消息创建时的时间pt: TPoint; / /消息创建时的鼠标位置end;消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。
窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。
message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。
由于W P a r a m、l P a r a m和P o i n t e r 都是3 2位的,因此,它们之间可以相互转换。
WM_NULL = $0000;WM_CREATE = $0001;应用程序创建一个窗口WM_DESTROY = $0002;一个窗口被销毁WM_MOVE = $0003;移动一个窗口WM_SIZE = $0005;改变一个窗口的大小WM_ACTIVATE = $0006;一个窗口被激活或失去激活状态;WM_SETFOCUS = $0007;获得焦点后WM_KILLFOCUS = $0008;失去焦点WM_ENABLE = $000A;改变enable状态WM_SETREDRAW = $000B;设置窗口是否能重画WM_SETTEXT = $000C;应用程序发送此消息来设置一个窗口的文本WM_GETTEXT = $000D;应用程序发送此消息来复制对应窗口的文本到缓冲区WM_GETTEXTLENGTH = $000E;得到与一个窗口有关的文本的长度(不包含空字符)WM_PAINT = $000F;要求一个窗口重画自己WM_CLOSE = $0010;当一个窗口或应用程序要关闭时发送一个信号WM_QUERYENDSESSION = $0011;当用户选择结束对话框或程序自己调用ExitWindows函数WM_QUIT = $0012;用来结束程序运行或当程序调用postquitmessage函数WM_QUERYOPEN = $0013;当用户窗口恢复以前的大小位置时,把此消息发送给某个图标WM_ERASEBKGND = $0014;当窗口背景必须被擦除时(例在窗口改变大小时)WM_SYSCOLORCHANGE = $0015;当系统颜色改变时,发送此消息给所有顶级窗口WM_ENDSESSION = $0016;当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束WM_SYSTEMERROR = $0017;WM_SHOWWINDOW = $0018;当隐藏或显示窗口是发送此消息给这个窗口WM_ACTIVATEAPP = $001C;发此消息给应用程序哪个窗口是激活的,哪个是非激活的;WM_FONTCHANGE = $001D;当系统的字体资源库变化时发送此消息给所有顶级窗口WM_TIMECHANGE = $001E;当系统的时间变化时发送此消息给所有顶级窗口WM_CANCELMODE = $001F;发送此消息来取消某种正在进行的摸态(操作)WM_SETCURSOR = $0020;如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口WM_MOUSEACTIVATE = $0021;当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口WM_CHILDACTIVATE = $0022;发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小WM_QUEUESYNC = $0023;此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息WM_GETMINMAXINFO = $0024;此消息发送给窗口当它将要改变大小或位置;WM_PAINTICON = $0026;发送给最小化窗口当它图标将要被重画WM_ICONERASEBKGND = $0027;此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画WM_NEXTDLGCTL = $0028;发送此消息给一个对话框程序去更改焦点位置WM_SPOOLERSTATUS = $002A;每当打印管理列队增加或减少一条作业时发出此消息WM_DRAWITEM = $002B;当button,combobox,listbox,menu的可视外观改变时发送此消息给这些空件的所有者WM_MEASUREITEM = $002C;当button, combo box, list box, list view control, or menu item 被创建时发送此消息给控件的所有者WM_DELETEITEM = $002D;当the list box 或combo box 被销毁或当某些项被删除通过LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 消息WM_VKEYTOITEM = $002E;此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息WM_CHARTOITEM = $002F;此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息WM_SETFONT = $0030;当绘制文本时程序发送此消息得到控件要用的颜色WM_GETFONT = $0031;应用程序发送此消息得到当前控件绘制文本的字体WM_SETHOTKEY = $0032;应用程序发送此消息让一个窗口与一个热键相关连WM_GETHOTKEY = $0033;应用程序发送此消息来判断热键与某个窗口是否有关联WM_QUERYDRAGICON = $0037;此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标WM_COMPAREITEM = $0039;发送此消息来判定combobox或listbox新增加的项的相对位置WM_GETOBJECT = $003D;WM_COMPACTING = $0041;显示内存已经很少了WM_WINDOWPOSCHANGING = $0046;发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数WM_WINDOWPOSCHANGED = $0047;发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数WM_POWER = $0048;(适用于16位的windows)当系统将要进入暂停状态时发送此消息WM_COPYDATA = $004A;当一个应用程序传递数据给另一个应用程序时发送此消息WM_CANCELJOURNAL = $004B;当某个用户取消程序日志激活状态,提交此消息给程序WM_NOTIFY = $004E;当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口WM_INPUTLANGCHANGEREQUEST = $0050;当用户选择某种输入语言,或输入语言的热键改变WM_INPUTLANGCHANGE = $0051;当平台现场已经被改变后发送此消息给受影响的最顶级窗口WM_TCARD = $0052;当程序已经初始化windows帮助例程时发送此消息给应用程序WM_HELP = $0053;此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口WM_USERCHANGED = $0054;当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;WM_NOTIFYFORMAT = $0055;公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE 结构在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信WM_CONTEXTMENU = $007B;当用户某个窗口中点击了一下右键就发送此消息给这个窗口WM_STYLECHANGING = $007C;当调用SETWINDOWLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口WM_STYLECHANGED = $007D;当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口WM_DISPLAYCHANGE = $007E;当显示器的分辨率改变后发送此消息给所有的窗口WM_GETICON = $007F;此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;WM_SETICON = $0080;程序发送此消息让一个新的大图标或小图标与某个窗口关联;WM_NCCREATE = $0081;当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;WM_NCDESTROY = $0082;此消息通知某个窗口,非客户区正在销毁WM_NCCALCSIZE = $0083;当某个窗口的客户区域必须被核算时发送此消息WM_NCHITTEST = $0084;//移动鼠标,按住或释放鼠标时发生WM_NCPAINT = $0085;程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;WM_NCACTIVATE = $0086;此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态;WM_GETDLGCODE = $0087;发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它WM_NCMOUSEMOVE = $00A0;当光标在一个窗口的非客户区内移动时发送此消息给这个窗口//非客户区为:窗体的标题栏及窗的边框体WM_NCLBUTTONDOWN = $00A1;当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息WM_NCLBUTTONUP = $00A2;当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;WM_NCLBUTTONDBLCLK = $00A3;当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息WM_NCRBUTTONDOWN = $00A4;当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCRBUTTONUP = $00A5;当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCRBUTTONDBLCLK = $00A6;当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息WM_NCMBUTTONDOWN = $00A7;当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCMBUTTONUP = $00A8;当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCMBUTTONDBLCLK = $00A9;当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息WM_KEYFIRST = $0100;WM_KEYDOWN = $0100;//按下一个键WM_KEYUP = $0101;//释放一个键WM_CHAR = $0102;//按下某键,并已发出WM_KEYDOWN,WM_KEYUP消息WM_DEADCHAR = $0103;当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口WM_SYSKEYDOWN = $0104;当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口;WM_SYSKEYUP = $0105;当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口WM_SYSCHAR = $0106;当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口WM_SYSDEADCHAR = $0107;当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口WM_KEYLAST = $0108;WM_INITDIALOG = $0110;在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务WM_COMMAND = $0111;当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译WM_SYSCOMMAND = $0112;当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息WM_TIMER = $0113; //发生了定时器事件WM_HSCROLL = $0114;当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件WM_VSCROLL = $0115;当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件WM_INITMENU = $0116;当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单WM_INITMENUPOPUP = $0117;当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部WM_MENUSELECT = $011F;当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)WM_MENUCHAR = $0120;当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;WM_ENTERIDLE = $0121;当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待WM_MENURBUTTONUP = $0122;WM_MENUDRAG = $0123;WM_MENUGETOBJECT = $0124;WM_UNINITMENUPOPUP = $0125;WM_MENUCOMMAND = $0126;WM_CHANGEUISTATE = $0127;WM_UPDATEUISTATE = $0128;WM_QUERYUISTATE = $0129;WM_CTLCOLORMSGBOX = $0132;在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色WM_CTLCOLOREDIT = $0133;当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色WM_CTLCOLORLISTBOX = $0134;当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色WM_CTLCOLORBTN = $0135;当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色WM_CTLCOLORDLG = $0136;当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色WM_CTLCOLORSCROLLBAR= $0137;当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色WM_CTLCOLORSTATIC = $0138;当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色WM_MOUSEFIRST = $0200;WM_MOUSEMOVE = $0200;// 移动鼠标WM_LBUTTONDOWN = $0201;//按下鼠标左键WM_LBUTTONUP = $0202;//释放鼠标左键WM_LBUTTONDBLCLK = $0203;//双击鼠标左键WM_RBUTTONDOWN = $0204;//按下鼠标右键WM_RBUTTONUP = $0205;//释放鼠标右键WM_RBUTTONDBLCLK = $0206;//双击鼠标右键WM_MBUTTONDOWN = $0207;//按下鼠标中键WM_MBUTTONUP = $0208;//释放鼠标中键WM_MBUTTONDBLCLK = $0209;//双击鼠标中键WM_MOUSEWHEEL = $020A;当鼠标轮子转动时发送此消息个当前有焦点的控件WM_MOUSELAST = $020A;WM_PARENTNOTIFY = $0210;当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口WM_ENTERMENULOOP = $0211;发送此消息通知应用程序的主窗口that已经进入了菜单循环模式WM_EXITMENULOOP = $0212;发送此消息通知应用程序的主窗口that已退出了菜单循环模式WM_NEXTMENU = $0213;WM_SIZING = 532;当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置也可以修改他们WM_CAPTURECHANGED = 533;发送此消息给窗口当它失去捕获的鼠标时;WM_MOVING = 534;当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们;WM_POWERBROADCAST = 536;此消息发送给应用程序来通知它有关电源管理事件;WM_DEVICECHANGE = 537;当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序WM_IME_STARTCOMPOSITION = $010D;WM_IME_ENDCOMPOSITION = $010E;WM_IME_COMPOSITION = $010F;WM_IME_KEYLAST = $010F;WM_IME_SETCONTEXT = $0281;WM_IME_NOTIFY = $0282;WM_IME_CONTROL = $0283;WM_IME_COMPOSITIONFULL = $0284;WM_IME_SELECT = $0285;WM_IME_CHAR = $0286;WM_IME_REQUEST = $0288;WM_IME_KEYDOWN = $0290;WM_IME_KEYUP = $0291;WM_MDICREATE = $0220;应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY = $0221;应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口WM_MDIACTIVATE = $0222;应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;WM_MDIRESTORE = $0223;程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小WM_MDINEXT = $0224;程序发送此消息给MDI客户窗口激活下一个或前一个窗口WM_MDIMAXIMIZE = $0225;程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;WM_MDITILE = $0226;程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口WM_MDICASCADE = $0227;程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口WM_MDIICONARRANGE = $0228;程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口WM_MDIGETACTIVE = $0229;程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄WM_MDISETMENU = $0230;程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单WM_ENTERSIZEMOVE = $0231;WM_EXITSIZEMOVE = $0232;WM_DROPFILES = $0233;WM_MDIREFRESHMENU = $0234;WM_MOUSEHOVER = $02A1;WM_MOUSELEAVE = $02A3;WM_CUT = $0300;程序发送此消息给一个编辑框或combobox来删除当前选择的文本WM_COPY = $0301;程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板WM_PASTE = $0302;程序发送此消息给editcontrol或combobox从剪贴板中得到数据WM_CLEAR = $0303;程序发送此消息给editcontrol或combobox清除当前选择的内容;WM_UNDO = $0304;程序发送此消息给editcontrol或combobox撤消最后一次操作WM_RENDERFORMAT = $0305;WM_RENDERALLFORMATS = $0306;WM_DESTROYCLIPBOARD = $0307;当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者WM_DRAWCLIPBOARD = $0308;当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = $0309;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = $030A;WM_SIZECLIPBOARD = $030B;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBFORMATNAME = $030C;通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字WM_CHANGECBCHAIN = $030D;当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSCROLLCLIPBOARD = $030E;此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_QUERYNEWPALETTE = $030F;此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板WM_PALETTEISCHANGING= $0310;当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序WM_PALETTECHANGED = $0311;此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板WM_HOTKEY = $0312;当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息WM_PRINT = 791;应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;WM_PRINTCLIENT = 792;WM_HANDHELDFIRST = 856;WM_HANDHELDLAST = 863;WM_PENWINFIRST = $0380;WM_PENWINLAST = $038F;WM_COALESCE_FIRST = $0390;WM_COALESCE_LAST = $039F;WM_DDE_FIRST = $03E0;WM_DDE_INITIATE = WM_DDE_FIRST + 0;一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERMINATE = WM_DDE_FIRST + 1;一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;WM_DDE_ADVISE = WM_DDE_FIRST + 2;一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它WM_DDE_UNADVISE = WM_DDE_FIRST + 3;一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项WM_DDE_ACK = WM_DDE_FIRST + 4;此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE,WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息WM_DDE_DATA = WM_DDE_FIRST + 5;一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项WM_DDE_REQUEST = WM_DDE_FIRST + 6;一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;WM_DDE_POKE = WM_DDE_FIRST + 7;一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;WM_DDE_EXECUTE = WM_DDE_FIRST + 8;一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作回应;WM_DDE_LAST = WM_DDE_FIRST + 8;WM_APP = $8000;WM_USER = $0400;此消息能帮助应用程序自定义私有消息;/////////////////////////////////////////////////////////////////////通知消息通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。