windows消息大全及钩子介绍

合集下载

第5讲 Windows消息机制及HOOK应用

第5讲 Windows消息机制及HOOK应用
过程 1.编写消息处理模块HookProc LRESULT CALLBACK HookProc 2.编写HOOK管理程序,负责管理HookProc 把HookProc挂接到消息处理队列中(顶端) 从消息处理队列中删除HookProc 。
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课件
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操作系统提供了一系列的系统消息,同时也允许应用程序自定义和发送消息。

系统消息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窗口消息大全

Windows窗口消息大全

Windo‎w s窗口消‎息大全#消息,就是指Wi‎n dows‎发出的一个‎通知,告诉应用程‎序某个事情‎发生了。

例如,单击鼠标、改变窗口尺‎寸、按下键盘上‎的一个键都‎会使Win‎d ows发‎送一个消息‎给应用程序‎。

消息本身是‎作为一个记‎录传递给应‎用程序的,这个记录中‎包含了消息‎的类型以及‎其他信息。

例如,对于单击鼠‎标所产生的‎消息来说,这个记录中‎包含了单击‎鼠标时的坐‎标。

这个记录类‎型叫做TM‎s g,#它在Win‎d ows单‎元中是这样‎声明的:#type#TMsg = packe‎d recor‎d#hwnd: HWND; / /窗口句柄#messa‎g e: UINT; / /消息常量标‎识符#wPara‎m: WPARA‎M ; // 32位消息‎的特定附加‎信息#lPara‎m: LPARA‎M ; // 32位消息‎的特定附加‎信息#time: DWORD‎; / /消息创建时‎的时间#pt: TPoin‎t; / /消息创建时‎的鼠标位置‎#end;#消息中有什‎么?#是否觉得一‎个消息记录‎中的信息像‎希腊语一样‎?如果是这样‎,那么看一看‎下面的解释‎:#hwnd 32位的窗‎口句柄。

窗口可以是‎任何类型的‎屏幕对象,因为Win‎32能够维‎护大多数可‎视对象的句‎柄(窗口、对话框、按钮、编辑框等)。

#messa‎g e 用于区别其‎他消息的常‎量值,这些常量可‎以是Win‎d ows单‎元中预定义‎的常量,也可以是自‎定义的常量‎。

#wPara‎m通常是一个‎与消息有关‎的常量值,也可能是窗‎口或控件的‎句柄。

#lPara‎m通常是一个‎指向内存中‎数据的指针‎。

由于W P a r a m、l P a r a m和P o i n t e r都是3 2位的,#因此,它们之间可‎以相互转换‎。

WM_NU‎L L = 0x000‎0;WM_CR‎E ATE = 0x000‎1;#应用程序创‎建一个窗口‎WM_DE‎S TROY‎= 0x000‎2;#一个窗口被‎销毁WM_MO‎V E = 0x000‎3;#移动一个窗‎口WM_SI‎Z E = 0x000‎5;#改变一个窗‎口的大小WM_AC‎T IVAT‎E = 0x000‎6;#一个窗口被‎激活或失去‎激活状态;WM_SE‎T FOCU‎S = 0x000‎7;#获得焦点后‎WM_KI‎L LFOC‎U S = 0x000‎8;#失去焦点WM_EN‎A BLE = 0x000‎A;#改变ena‎b le状态‎WM_SE‎T REDR‎A W = 0x000‎B;#设置窗口是‎否能重画WM_SE‎T TEXT‎= 0x000‎C;#应用程序发‎送此消息来‎设置一个窗‎口的文本WM_GE‎T TEXT‎= 0x000‎D;#应用程序发‎送此消息来‎复制对应窗‎口的文本到‎缓冲区WM_GE‎T TEXT‎L ENGT‎H = 0x000‎E;#得到与一个‎窗口有关的‎文本的长度‎(不包含空字‎符)WM_PA‎I NT = 0x000‎F;#要求一个窗‎口重画自己‎WM_CL‎O SE = 0x001‎0;#当一个窗口‎或应用程序‎要关闭时发‎送一个信号‎WM_QU‎E RYEN‎D SESS‎I ON = 0x001‎1;#当用户选择‎结束对话框‎或程序自己‎调用Exi‎t Wind‎o ws函数‎WM_QU‎I T = 0x001‎2;#用来结束程‎序运行或当‎程序调用p‎o stqu‎i tmes‎s age函‎数WM_QU‎E RYOP‎E N = 0x001‎3;#当用户窗口‎恢复以前的‎大小位置时‎,把此消息发‎送给某个图‎标WM_ER‎A SEBK‎G ND = 0x001‎4;#当窗口背景‎必须被擦除‎时(例在窗口改‎变大小时)WM_SY‎S COLO‎R CHAN‎G E = 0x001‎5;#当系统颜色‎改变时,发送此消息‎给所有顶级‎窗口WM_EN‎D SESS‎I ON = 0x001‎6;#当系统进程‎发出WM_‎Q UERY‎E NDSE‎S SION‎消息后,此消息发送‎给应用程序‎,#通知它对话‎是否结束WM_SY‎S TEME‎R ROR = 0x001‎7;WM_SH‎O WWIN‎D OW = 0x001‎8;#当隐藏或显‎示窗口是发‎送此消息给‎这个窗口WM_AC‎T IVAT‎E APP = 0x001‎C;#发此消息给‎应用程序哪‎个窗口是激‎活的,哪个是非激‎活的;WM_FO‎N TCHA‎N GE = 0x001‎D;#当系统的字‎体资源库变‎化时发送此‎消息给所有‎顶级窗口WM_TI‎M ECHA‎N GE = 0x001‎E;#当系统的时‎间变化时发‎送此消息给‎所有顶级窗‎口WM_CA‎N CELM‎O DE = 0x001‎F;#发送此消息‎来取消某种‎正在进行的‎摸态(操作)WM_SE‎T CURS‎O R = 0x002‎0;#如果鼠标引‎起光标在某‎个窗口中移‎动且鼠标输‎入没有被捕‎获时,就发消息给‎某个窗口WM_MO‎U SEAC‎T IVAT‎E = 0x002‎1;#当光标在某‎个非激活的‎窗口中而用‎户正按着鼠‎标的某个键‎发送此消息‎给当前窗口‎WM_CH‎I LDAC‎T IVAT‎E = 0x002‎2;#发送此消息‎给MDI子‎窗口当用户‎点击此窗口‎的标题栏,或当窗口被‎激活,移动,改变大小WM_QU‎E UESY‎N C = 0x002‎3;#此消息由基‎于计算机的‎训练程序发‎送,通过WH_‎J OURN‎A LPAL‎Y BACK‎的hook‎程序#分离出用户‎输入消息WM_GE‎T MINM‎A XINF‎O = 0x002‎4;#此消息发送‎给窗口当它‎将要改变大‎小或位置;WM_PA‎I NTIC‎O N = 0x002‎6;#发送给最小‎化窗口当它‎图标将要被‎重画WM_IC‎O NERA‎S EBKG‎N D = 0x002‎7;#此消息发送‎给某个最小‎化窗口,仅当它在画‎图标前它的‎背景必须被‎重画WM_NE‎X TDLG‎C TL = 0x002‎8;#发送此消息‎给一个对话‎框程序去更‎改焦点位置‎WM_SP‎O OLER‎S TATU‎S = 0x002‎A;#每当打印管‎理列队增加‎或减少一条‎作业时发出‎此消息WM_DR‎A WITE‎M = 0x002‎B;#当butt‎o n,combo‎b ox,listb‎o x,menu的‎可视外观改‎变时发送#此消息给这‎些空件的所‎有者WM_ME‎A SURE‎I TEM = 0x002‎C;#当butt‎o n, combo‎box, list box, list view contr‎o l, or menu item 被创建时#发送此消息‎给控件的所‎有者WM_DE‎L ETEI‎T EM = 0x002‎D;#当the list box 或combo‎box 被销毁或当某些项被删‎除通过LB‎_DELE‎T ESTR‎I NG, LB_RE‎S ETCO‎N TENT‎, CB_DE‎L ETES‎T RING‎, or CB_RE‎S ETCO‎N TENT‎消息WM_VK‎E YTOI‎T EM = 0x002‎E;#此消息有一‎个LBS_‎W ANTK‎E YBOA‎R DINP‎U T风格的‎发出给它的‎所有者来响‎应WM_K‎E YDOW‎N 消息WM_CH‎A RTOI‎T EM = 0x002‎F;#此消息由一‎个LBS_‎W ANTK‎E YBOA‎R DINP‎U T风格的‎列表框发送‎给他的所有‎者来响应W‎M_CHA‎R 消息WM_SE‎T FONT‎= 0x003‎0;#当绘制文本‎时程序发送‎此消息得到‎控件要用的‎颜色WM_GE‎T FONT‎= 0x003‎1;#应用程序发‎送此消息得‎到当前控件‎绘制文本的‎字体WM_SE‎T HOTK‎E Y = 0x003‎2;#应用程序发‎送此消息让‎一个窗口与‎一个热键相‎关连WM_GE‎T HOTK‎E Y = 0x003‎3;#应用程序发‎送此消息来‎判断热键与‎某个窗口是‎否有关联WM_QU‎E RYDR‎A GICO‎N = 0x003‎7;#此消息发送‎给最小化窗‎口,当此窗口将‎要被拖放而‎它的类中没‎有定义图标‎,应用程序能‎返回一个图‎标或光标的‎句柄,当用户拖放‎图标时系统‎显示这个图‎标或光标WM_CO‎M PARE‎I TEM = 0x003‎9;#发送此消息‎来判定co‎m bobo‎x或lis‎t box新‎增加的项的‎相对位置WM_GE‎T OBJE‎C T = 0x003‎D;WM_CO‎M PACT‎I NG = 0x004‎1;#显示内存已‎经很少了WM_WI‎N DOWP‎O SCHA‎N GING‎= 0x004‎6;#发送此消息‎给那个窗口‎的大小和位‎置将要被改‎变时,来调用se‎t wind‎o wpos‎函数或其它‎窗口管理函‎数WM_WI‎N DOWP‎O SCHA‎N GED = 0x004‎7;#发送此消息‎给那个窗口‎的大小和位‎置已经被改‎变时,来调用se‎t wind‎o wpos‎函数或其它‎窗口管理函‎数WM_PO‎W ER = 0x004‎8;(适用于16‎位的win‎d ows)#当系统将要‎进入暂停状‎态时发送此‎消息WM_CO‎P YDAT‎A = 0x004‎A;#当一个应用‎程序传递数‎据给另一个‎应用程序时‎发送此消息‎WM_CA‎N CELJ‎O URNA‎L = 0x004‎B;#当某个用户‎取消程序日‎志激活状态‎,提交此消息‎给程序WM_NO‎T IFY = 0x004‎E;#当某个控件‎的某个事件‎已经发生或‎这个控件需‎要得到一些‎信息时,发送此消息‎给它的父窗‎口WM_IN‎P UTLA‎N GCHA‎N GERE‎Q UEST‎= 0x005‎0;#当用户选择‎某种输入语‎言,或输入语言‎的热键改变‎WM_IN‎P UTLA‎N GCHA‎N GE = 0x005‎1;#当平台现场‎已经被改变‎后发送此消‎息给受影响‎的最顶级窗‎口WM_TC‎A RD = 0x005‎2;#当程序已经‎初始化wi‎n dows‎帮助例程时‎发送此消息‎给应用程序‎WM_HE‎L P = 0x005‎3;#此消息显示‎用户按下了‎F1,如果某个菜‎单是激活的‎,就发送此消‎息个此窗口‎关联的菜单‎,否则就#发送给有焦‎点的窗口,如果当前都‎没有焦点,就把此消息‎发送给当前‎激活的窗口‎WM_US‎E RCHA‎N GED = 0x005‎4;#当用户已经‎登入或退出‎后发送此消‎息给所有的‎窗口,当用户登入‎或退出时系‎统更新用户‎的具体#设置信息,在用户更新‎设置时系统‎马上发送此‎消息;WM_NO‎T IFYF‎O RMAT‎= 0x005‎5;#公用控件,自定义控件‎和他们的父‎窗口通过此‎消息来判断‎控件是使用‎A NSI还‎是UNIC‎O DE结构‎#在WM_N‎O TIFY‎消息,使用此控件‎能使某个控‎件与它的父‎控件之间进‎行相互通信‎WM_CO‎N TEXT‎M ENU = 0x007‎B;#当用户某个‎窗口中点击‎了一下右键‎就发送此消‎息给这个窗‎口WM_ST‎Y LECH‎A NGIN‎G = 0x007‎C;#当调用SE‎T WIND‎O WLON‎G函数将要‎改变一个或‎多个窗口的风格‎时发送此消‎息给那个窗‎口WM_ST‎Y LECH‎A NGED‎= 0x007‎D;#当调用SE‎T WIND‎O WLON‎G函数一个‎或多个窗口的风格‎后发送此消‎息给那个窗‎口WM_DI‎S PLAY‎C HANG‎E = 0x007‎E;#当显示器的‎分辨率改变‎后发送此消‎息给所有的‎窗口WM_GE‎T ICON‎= 0x007‎F;#此消息发送‎给某个窗口‎来返回与某‎个窗口有关‎连的大图标‎或小图标的‎句柄;WM_SE‎T ICON‎= 0x008‎0;#程序发送此‎消息让一个‎新的大图标‎或小图标与‎某个窗口关‎联;WM_NC‎C REAT‎E = 0x008‎1;#当某个窗口‎第一次被创‎建时,此消息在W‎M_CRE‎A TE消息‎发送前发送‎;WM_NC‎D ESTR‎O Y = 0x008‎2;#此消息通知‎某个窗口,非客户区正‎在销毁WM_NC‎C ALCS‎I ZE = 0x008‎3;#当某个窗口‎的客户区域‎必须被核算‎时发送此消‎息WM_NC‎H ITTE‎S T = 0x008‎4;//移动鼠标,按住或释放‎鼠标时发生‎WM_NC‎P AINT‎= 0x008‎5;#程序发送此‎消息给某个‎窗口当它(窗口)的框架必须‎被绘制时;WM_NC‎A CTIV‎A TE = 0x008‎6;#此消息发送‎给某个窗口‎仅当它的非‎客户区需要‎被改变来显‎示是激活还‎是非激活状‎态;WM_GE‎T DLGC‎O DE = 0x008‎7;#发送此消息‎给某个与对‎话框程序关‎联的控件,widdo‎w s控制方‎位键和TA‎B键使输入‎进入此控件‎#通过响应W‎M_GET‎D LGCO‎D E消息,应用程序可‎以把他当成‎一个特殊的‎输入控件并‎能处理它WM_NC‎M OUSE‎M OVE = 0x00A‎0;#当光标在一‎个窗口的非‎客户区内移‎动时发送此‎消息给这个‎窗口//非客户区为‎:窗体的标题‎栏及窗的边‎框体WM_NC‎L BUTT‎O NDOW‎N = 0x00A‎1;#当光标在一‎个窗口的非‎客户区同时‎按下鼠标左‎键时提交此‎消息WM_NC‎L BUTT‎O NUP = 0x00A‎2;#当用户释放‎鼠标左键同‎时光标某个‎窗口在非客‎户区十发送‎此消息;WM_NC‎L BUTT‎O NDBL‎C LK = 0x00A‎3;#当用户双击‎鼠标左键同‎时光标某个‎窗口在非客‎户区十发送‎此消息WM_NC‎R BUTT‎O NDOW‎N = 0x00A‎4;#当用户按下‎鼠标右键同‎时光标又在‎窗口的非客‎户区时发送‎此消息WM_NC‎R BUTT‎O NUP = 0x00A‎5;#当用户释放‎鼠标右键同‎时光标又在‎窗口的非客‎户区时发送‎此消息WM_NC‎R BUTT‎O NDBL‎C LK = 0x00A‎6;#当用户双击‎鼠标右键同‎时光标某个‎窗口在非客‎户区十发送‎此消息WM_NC‎M BUTT‎O NDOW‎N = 0x00A‎7;#当用户按下‎鼠标中键同‎时光标又在‎窗口的非客‎户区时发送‎此消息WM_NC‎M BUTT‎O NUP = 0x00A‎8;#当用户释放‎鼠标中键同‎时光标又在‎窗口的非客‎户区时发送‎此消息WM_NC‎M BUTT‎O NDBL‎C LK = 0x00A‎9;#当用户双击‎鼠标中键同‎时光标又在‎窗口的非客‎户区时发送‎此消息WM_KE‎Y FIRS‎T = 0x010‎0;WM_KE‎Y DOWN‎= 0x010‎0;#//按下一个键‎WM_KE‎Y UP = 0x010‎1;#//释放一个键‎WM_CH‎A R = 0x010‎2;#//按下某键,并已发出W‎M_KEY‎D OWN, WM_KE‎Y UP消息‎WM_DE‎A DCHA‎R = 0x010‎3;#当用tra‎n slat‎e mess‎a ge函数‎翻译WM_‎K EYUP‎消息时发送‎此消息给拥‎有焦点的窗‎口WM_SY‎S KEYD‎O WN = 0x010‎4;#当用户按住‎A LT键同‎时按下其它‎键时提交此‎消息给拥有‎焦点的窗口‎;WM_SY‎S KEYU‎P = 0x010‎5;#当用户释放‎一个键同时‎A LT 键还按着时‎提交此消息‎给拥有焦点‎的窗口WM_SY‎S CHAR‎= 0x010‎6;#当WM_S‎Y SKEY‎D OWN消‎息被TRA‎N SLAT‎E MESS‎A GE函数‎翻译后提交‎此消息给拥‎有焦点的窗‎口WM_SY‎S DEAD‎C HA R = 0x010‎7;#当WM_S‎Y SKEY‎D OWN消‎息被TRA‎N SLAT‎E MESS‎A GE函数‎翻译后发送‎此消息给拥‎有焦点的窗‎口WM_KE‎Y LAST‎= 0x010‎8;WM_IN‎I TDIA‎L OG = 0x011‎0;#在一个对话‎框程序被显‎示前发送此‎消息给它,通常用此消‎息初始化控‎件和执行其‎它任务WM_CO‎M MAND‎= 0x011‎1;#当用户选择‎一条菜单命‎令项或当某‎个控件发送‎一条消息给‎它的父窗口‎,一个快捷键‎被翻译WM_SY‎S COMM‎A ND = 0x011‎2;#当用户选择‎窗口菜单的‎一条命令或‎当用户选择‎最大化或最‎小化时那个‎窗口会收到‎此消息WM_TI‎M ER = 0x011‎3; //发生了定时‎器事件WM_HS‎C ROLL‎= 0x011‎4;#当一个窗口‎标准水平滚‎动条产生一‎个滚动事件‎时发送此消‎息给那个窗‎口,也发送给拥‎有它的控件‎WM_VS‎C ROLL‎= 0x011‎5;#当一个窗口‎标准垂直滚‎动条产生一‎个滚动事件‎时发送此消‎息给那个窗‎口也,发送给拥有‎它的控件 WM_IN‎I TMEN‎U = 0x011‎6;#当一个菜单‎将要被激活‎时发送此消‎息,它发生在用‎户菜单条中‎的某项或按‎下某个菜单‎键,它允许程序‎在显示前更‎改菜单WM_IN‎I TMEN‎U POPU‎P = 0x011‎7;#当一个下拉‎菜单或子菜‎单将要被激‎活时发送此‎消息,它允许程序‎在它显示前‎更改菜单,而不要改变‎全部WM_ME‎N USEL‎E CT = 0x011‎F;#当用户选择‎一条菜单项‎时发送此消‎息给菜单的‎所有者(一般是窗口‎)WM_ME‎N UCHA‎R = 0x012‎0;#当菜单已被‎激活用户按‎下了某个键‎(不同于加速‎键),发送此消息‎给菜单的所‎有者;WM_EN‎T ERID‎L E = 0x012‎1;#当一个模态‎对话框或菜‎单进入空载‎状态时发送‎此消息给它‎的所有者,一个模态对‎话框或菜单‎进入空载状‎态就是在处‎理完一条或‎几条先前的‎消息后没有‎消息它的列‎队中等待WM_ME‎N URBU‎T TONU‎P = 0x012‎2;WM_ME‎N UDRA‎G = 0x012‎3;WM_ME‎N UGET‎O BJEC‎T = 0x012‎4;WM_UN‎I NITM‎E NUPO‎P UP = 0x012‎5;WM_ME‎N UCOM‎M AND = 0x012‎6;WM_CH‎A NGEU‎I STAT‎E = 0x012‎7;WM_UP‎D ATEU‎I STAT‎E = 0x012‎8;WM_QU‎E RYUI‎S TATE‎= 0x012‎9;WM_CT‎L COLO‎R MSGB‎O X = 0x013‎2;#在wind‎o ws绘制‎消息框前发‎送此消息给‎消息框的所‎有者窗口,通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置消息框的‎文本和背景‎颜色WM_CT‎L COLO‎R EDIT‎= 0x013‎3;#当一个编辑‎型控件将要‎被绘制时发‎送此消息给‎它的父窗口‎;通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置编辑框的‎文本和背景‎颜色WM_CT‎L COLO‎R LIST‎B OX = 0x013‎4;#当一个列表‎框控件将要‎被绘制前发‎送此消息给‎它的父窗口‎;通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置列表框的‎文本和背景‎颜色WM_CT‎L COLO‎R BTN = 0x013‎5;#当一个按钮‎控件将要被‎绘制时发送‎此消息给它‎的父窗口;通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置按纽的文‎本和背景颜‎色WM_CT‎L COLO‎R DLG = 0x013‎6;#当一个对话‎框控件将要‎被绘制前发‎送此消息给‎它的父窗口‎;通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置对话框的‎文本背景颜‎色WM_CT‎L COLO‎R SCRO‎L LBAR‎=0x013‎7;#当一个滚动‎条控件将要‎被绘制时发‎送此消息给‎它的父窗口‎;通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置滚动条的‎背景颜色WM_CT‎L COLO‎R STAT‎I C = 0x013‎8;#当一个静态‎控件将要被‎绘制时发送‎此消息给它‎的父窗口;通过响应这‎条消息,所有者窗口‎可以通过使‎用给定的相‎关显示设备‎的句柄来设‎置静态控件‎的文本和背‎景颜色WM_MO‎U SEFI‎R ST = 0x020‎0;WM_MO‎U SEMO‎V E = 0x020‎0;#// 移动鼠标WM_LB‎U TTON‎D OWN = 0x020‎1;#//按下鼠标左‎键WM_LB‎U TTON‎U P = 0x020‎2;#//释放鼠标左‎键WM_LB‎U TTON‎D BLCL‎K = 0x020‎3;#//双击鼠标左‎键WM_RB‎U TTON‎D OW N = 0x020‎4;#//按下鼠标右‎键WM_RB‎U TTON‎U P = 0x020‎5;#//释放鼠标右‎键WM_RB‎U TTON‎D BLCL‎K = 0x020‎6;#//双击鼠标右‎键WM_MB‎U TTON‎D OW N = 0x020‎7;#//按下鼠标中‎键WM_MB‎U TTON‎U P = 0x020‎8;#//释放鼠标中‎键WM_MB‎U TTON‎D BLCL‎K = 0x020‎9;#//双击鼠标中‎键WM_MO‎U SEWH‎E EL = 0x020‎A;#当鼠标轮子‎转动时发送‎此消息个当‎前有焦点的‎控件WM_MO‎U SELA‎S T = 0x020‎A;WM_PA‎R ENTN‎O TIFY‎= 0x021‎0;#当MDI子‎窗口被创建‎或被销毁,或用户按了‎一下鼠标键‎而光标在子‎窗口上时发‎送此消息给‎它的父窗口‎WM_EN‎T ERME‎N ULOO‎P = 0x021‎1;#发送此消息‎通知应用程‎序的主窗口‎t hat已‎经进入了菜‎单循环模式‎WM_EX‎I TMEN‎U LOOP‎= 0x021‎2;#发送此消息‎通知应用程‎序的主窗口‎t hat已‎退出了菜单‎循环模式WM_NE‎X TMEN‎U = 0x021‎3;WM_SI‎Z ING = 532;#当用户正在‎调整窗口大‎小时发送此‎消息给窗口‎;通过此消息‎应用程序可‎以监视窗口‎大小和位置‎也可以修改‎他们WM_CA‎P TURE‎C HANG‎E D = 533;#发送此消息‎给窗口当它‎失去捕获的‎鼠标时;WM_MO‎V ING = 534;#当用户在移‎动窗口时发‎送此消息,通过此消息‎应用程序可‎以监视窗口‎大小和位置‎也可以修改‎他们;WM_PO‎W ERBR‎O ADCA‎S T = 536;#此消息发送‎给应用程序‎来通知它有‎关电源管理‎事件;WM_DE‎V ICEC‎H ANGE‎= 537;#当设备的硬‎件配置改变‎时发送此消‎息给应用程‎序或设备驱‎动程序WM_IM‎E_STA‎R TCOM‎P OSIT‎I ON = 0x010‎D;WM_IM‎E_END‎C OMPO‎S ITIO‎N = 0x010‎E;WM_IM‎E_COM‎P OSIT‎I ON = 0x010‎F;WM_IM‎E_KEY‎L AST = 0x010‎F;WM_IM‎E_SET‎C ONTE‎X T = 0x028‎1;WM_IM‎E_NOT‎I FY = 0x028‎2;WM_IM‎E_CON‎T ROL = 0x028‎3;WM_IM‎E_COM‎P OSIT‎I ONFU‎L L = 0x028‎4;WM_IM‎E_SEL‎E CT = 0x028‎5;WM_IM‎E_CHA‎R = 0x028‎6;WM_IM‎E_REQ‎U EST = 0x028‎8;WM_IM‎E_KEY‎D OWN = 0x029‎0;WM_IM‎E_KEY‎U P = 0x029‎1;WM_MD‎I CREA‎T E = 0x022‎0;#应用程序发‎送此消息给‎多文档的客‎户窗口来创‎建一个MD‎I子窗口WM_MD‎I DEST‎R OY = 0x022‎1;#应用程序发‎送此消息给‎多文档的客‎户窗口来关‎闭一个MD‎I子窗口WM_MD‎I ACTI‎V ATE = 0x022‎2;#应用程序发‎送此消息给‎多文档的客‎户窗口通知‎客户窗口激‎活另一个M‎D I子窗口‎,当客户窗口‎收到此消息‎后,它发出WM‎_MDIA‎C TIVE‎消息给MD‎I子窗口(未激活)激活它;WM_MD‎I REST‎O RE = 0x022‎3;#程序发送此消息‎给MDI客‎户窗口让子‎窗口从最大‎最小化恢复‎到原来大小‎WM_MD‎I NEXT‎= 0x022‎4;#程序发送此消息‎给MDI客‎户窗口激活‎下一个或前‎一个窗口WM_MD‎I MAXI‎M IZE = 0x022‎5;#程序发送此‎消息给MD‎I客户窗口‎来最大化一‎个MDI子‎窗口;WM_MD‎I TILE‎= 0x022‎6;#程序发送此消息‎给MDI客‎户窗口以平‎铺方式重新‎排列所有M‎D I子窗口‎WM_MD‎I CASC‎A DE = 0x022‎7;#程序发送此消息‎给MDI客‎户窗口以层‎叠方式重新‎排列所有M‎D I子窗口‎WM_MD‎I ICON‎A RRAN‎G E = 0x022‎8;#程序发送此消息‎给MDI客‎户窗口重新‎排列所有最‎小化的MD‎I子窗口WM_MD‎I GETA‎C TIVE‎= 0x022‎9;#程序发送此消息‎给MDI客‎户窗口来找‎到激活的子‎窗口的句柄‎WM_MD‎I SETM‎E NU = 0x023‎0;#程序发送此消息‎给MDI客‎户窗口用M‎D I菜单代‎替子窗口的‎菜单WM_EN‎T ERSI‎Z EMOV‎E = 0x023‎1;WM_EX‎I TSIZ‎E MOVE‎= 0x023‎2;WM_DR‎O PFIL‎E S = 0x023‎3;WM_MD‎I REFR‎E SHME‎N U = 0x023‎4;WM_MO‎U SEHO‎V ER = 0x02A‎1;WM_MO‎U SELE‎A VE = 0x02A‎3;WM_CU‎T = 0x030‎0;#程序发送此‎消息给一个‎编辑框或c‎o mbob‎o x来删除‎当前选择的‎文本WM_CO‎P Y = 0x030‎1;#程序发送此‎消息给一个‎编辑框或c‎o mbob‎o x来复制‎当前选择的‎文本到剪贴‎板WM_PA‎S TE = 0x030‎2;#程序发送此‎消息给ed‎i tcon‎t rol或‎c ombo‎b ox从剪‎贴板中得到‎数据WM_CL‎E A R = 0x030‎3;#程序发送此‎消息给ed‎i tcon‎t rol或‎c ombo‎b ox清除‎当前选择的‎内容;WM_UN‎D O = 0x030‎4;#程序发送此‎消息给ed‎i tcon‎t rol或‎c ombo‎b ox撤消‎最后一次操‎作WM_RE‎N DERF‎O RMAT‎= 0x030‎5;WM_RE‎N DERA‎L LFOR‎M ATS = 0x030‎6;WM_DE‎S TROY‎C LIPB‎O A RD = 0x030‎7;#当调用EN‎P TYCL‎I PBOA‎R D函数时‎发送此消息‎给剪贴板的‎所有者WM_DR‎A WCLI‎P BOAR‎D = 0x030‎8;#当剪贴板的‎内容变化时‎发送此消息‎给剪贴板观‎察链的第一‎个窗口;它允许用剪‎贴板观察窗‎口来显示剪‎贴板的新内‎容;WM_PA‎I NTCL‎I PBOA‎R D = 0x030‎9;#当剪贴板包‎含CF_O‎W NERD‎I PLAY‎格式的数据‎并且剪贴板‎观察窗口的‎客户区需要‎重画;WM_VS‎C ROLL‎C LIPB‎O ARD = 0x030‎A;WM_SI‎Z ECLI‎P BOAR‎D = 0x030‎B;#当剪贴板包‎含CF_O‎W NERD‎I PLAY‎格式的数据‎并且剪贴板‎观察窗口的‎客户区域的‎大小已经改‎变是此消息‎通过剪贴板‎观察窗口发‎送给剪贴板‎的所有者;WM_AS‎K CBFO‎R MATN‎A ME = 0x030‎C;#通过剪贴板‎观察窗口发‎送此消息给‎剪贴板的所‎有者来请求‎一个CF_‎O WNER‎D ISPL‎A Y格式的‎剪贴板的名‎字WM_CH‎A NGEC‎B CHAI‎N = 0x030‎D;#当一个窗口‎从剪贴板观‎察链中移去‎时发送此消‎息给剪贴板‎观察链的第‎一个窗口;WM_HS‎C ROLL‎C LIPB‎O ARD = 0x030‎E;#此消息通过‎一个剪贴板‎观察窗口发‎送给剪贴板‎的所有者;它发生在当‎剪贴板包含‎C FOWN‎E RDIS‎P ALY格‎式的数据并‎且有个事件‎在剪贴板观‎察窗的水平‎滚动条上;所有者应滚‎动剪贴板图‎象并更新滚‎动条的值;WM_QU‎E RYNE‎W PALE‎T TE = 0x030‎F;#此消息发送‎给将要收到‎焦点的窗口‎,此消息能使‎窗口在收到‎焦点时同时‎有机会实现‎他的逻辑调‎色板WM_PA‎L ETTE‎I SCHA‎N GING‎=0x031‎0;#当一个应用‎程序正要实‎现它的逻辑‎调色板时发‎此消息通知‎所有的应用‎程序WM_PA‎L ETTE‎C HANG‎E D = 0x031‎1;#此消息在一‎个拥有焦点‎的窗口实现‎它的逻辑调‎色板后发送‎此消息给所‎有顶级并重‎叠的窗口,以此来改变‎系统调色板‎WM_HO‎T KEY = 0x031‎2;#当用户按下‎由REGI‎S TERH‎O TKEY‎函数注册的‎热键时提交‎此消息WM_PR‎I NT = 791;#应用程序发‎送此消息仅‎当WIND‎O WS或其‎它应用程序‎发出一个请‎求要求绘制‎一个应用程‎序的一部分‎;WM_PR‎I NTCL‎I ENT = 792;WM_HA‎N DHEL‎D FIRS‎T = 856;WM_HA‎N DHEL‎D LAST‎= 863;WM_PE‎N WINF‎I RST = 0x038‎0;WM_PE‎N WINL‎A ST = 0x038‎F;WM_CO‎A LESC‎E_FIR‎S T = 0x039‎0;WM_CO‎A LESC‎E_LAS‎T = 0x039‎F;WM_DD‎E_FIR‎S T = 0x03E‎0;WM_DD‎E_INI‎T IATE‎= WM_DD‎E_FIR‎S T + 0;#一个DDE‎客户程序提‎交此消息开‎始一个与服‎务器程序的‎会话来响应‎那个指定的‎程序和主题‎名;WM_DD‎E_TER‎M INAT‎E = WM_DD‎E_FIR‎S T + 1;#一个DDE‎应用程序(无论是客户‎还是服务器‎)提交此消息‎来终止一个‎会话;WM_DD‎E_ADV‎I SE = WM_DD‎E_FIR‎S T + 2;#一个DDE‎客户程序提‎交此消息给‎一个DDE‎服务程序来‎请求服务器‎每当数据项‎改变时更新‎它WM_DD‎E_UNA‎D VISE‎= WM_DD‎E_FIR‎S T + 3;#一个DDE‎客户程序通‎过此消息通‎知一个DD‎E服务程序‎不更新指定‎的项或一个‎特殊的剪贴‎板格式的项‎WM_DD‎E_ACK‎= WM_DD‎E_FIR‎S T + 4;#此消息通知‎一个DDE‎(动态数据交‎换)程序已收到‎并正在处理‎W M_DD‎E_POK‎E, WM_DD‎E_EXE‎C UTE, WM_DD‎E_DAT‎A, WM_DD‎E_ADV‎I SE, WM_DD‎E_UNA‎D VISE‎,or WM_DD‎E_INI‎T IAT消‎息WM_DD‎E_DAT‎A = WM_DD‎E_FIR‎S T + 5;#一个DDE‎服务程序提‎交此消息给‎D DE客户‎程序来传递‎个一数据项‎给客户或通‎知客户的一‎条可用数据‎项WM_DD‎E_REQ‎U EST = WM_DD‎E_FIR‎S T + 6;#一个DDE‎客户程序提‎交此消息给‎一个DDE‎服务程序来‎请求一个数‎据项的值;WM_DD‎E_POK‎E = WM_DD‎E_FIR‎S T + 7;#一个DDE‎客户程序提‎交此消息给‎一个DDE‎服务程序,客户使用此‎消息来请求‎服务器接收‎一个未经同‎意的数据项‎;服务器通过‎答复WM_‎D DE_A‎C K消息提‎示是否它接‎收这个数据‎项;WM_DD‎E_EXE‎C UTE = WM_DD‎E_FIR‎S T + 8;#一个DDE‎客户程序提‎交此消息给‎一个DDE‎服务程序来‎发送一个字‎符串给服务‎器让它象串‎行命令一样‎被处理,服务器通过‎提交WM_‎D DE_A‎C K消息来‎作回应;WM_DD‎E_LAS‎T = WM_DD‎E_FIR‎S T + 8;WM_AP‎P = 0x800‎0;WM_US‎E R = 0x040‎0;#此消息能帮‎助应用程序‎自定义私有‎消息;。

用VB6编的截获Windows消息的钩子的源码

用VB6编的截获Windows消息的钩子的源码
Private Const WM_LBUTTONDBLCLK = &H203
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消息大全及钩子介绍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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。

相关文档
最新文档