[转载]钩子函数大全(2)
(2010-07-21 11:12:26)标签: 转载 |
CallNextHookEx
函数功能:该函数发送挂钩信息给当前挂钩链中的下一个挂钩处理过程,一个挂钩处理过程可在对该挂钩信息进行处理之前或之后调用本函数.
函数原形:LRESULT CallNextHookEx(HHOOK hhk,int nCode,WPARAM wParam,LPARAM lParam);
参数:
hhk:当前挂钩的句柄.一个应用程序获得的此句柄是此前SetWindowsHookEx的调用结果.
nCode:指定发送给当前挂钩处理过程的挂钩代码.下一个挂钩处理函数使用此代码以决定如何处理该挂钩信息.
wParam:指定发送给当前挂钩处理过程的wParam值,此参数的含义依赖于与当前挂钩相关的挂钩类型
lParam:指定发送给当前挂钩处理过程的lParam值,此参数的含义依赖于与当前挂钩相关的挂钩类型.
返回值:其返回值是链中下一个挂钩处理过程的返回值,当前的挂钩处理过程也必须返回此值,此返回值的含义依赖与挂钩的类型,如果希望获得更多的信息,可参阅关于独立挂钩处理过程的介绍.
备注:挂钩处理过程被安置于不同的具有一定挂钩类型的挂钩链中,函数CallNextHookEx调用该链中的下一个挂钩.对函数CallNextHookEx的调用是可选的,但同时也是被极力推荐使用的,否则其他安装了挂钩的应用程序将无法收到挂钩通知,由此可能导致错误的行为.除非您确实需要使其他应用程序不能此挂钩通知,否则,您应该调用此函数CallNextHookEx.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:user32.lib.
CallWndProc
函数功能:该函数挂钩处理过程是由应用程序定义或由库定义的回调函数,它与函数 SetWindowsHookEx配套使用,系统调用此函数无论何时一旦函数 SendMessage被调用,在将消息发送至相应的窗口处理过程之前,系统先将该消息发送至挂钩处理过程,该挂钩处理过程可以对改消息进行检查,但不能修改之.
类型HOOKPROC定义了指向此类回调函数的指针,CallWndProc是应用程序定义或库定义的函数名的位置标志位.
函数原形:LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam );
参数:
nCode:指定该挂钩处理过程是否必须对该消息进行处理,若nCode 是HC_ACTION,则该挂钩处理过程必须处理该消息.若nCode的值小于0,则此挂钩处理过程必须在未对该消息作进一步处理的情况下,将其发送给函数 CallNextHookEx并返回由 CallNextHookEx返回的值.
wParam:指示该消息是否由当前线程发出,若该消息由当前线程发出,其值为非0值,否则,其值为0.
lParam:指向一个CWPSTRUCT结构,该结构包含了此消息的详细消息.
返回值:若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值;若nCode的值大于或等于0,我们极力推荐对函数CallNextHookEx进行调用,并返回其返回值.否则,其他安装了WM_CALLWNDPROC挂钩的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩没有调用函数CallNextHookEx,则返回值为0.
备注:挂钩处理函数CallWndPro可以对消息进行检查,但不能修改之.在该挂钩处理过程将控制返回给系统之后,该消息被发送至相应的窗口过程.
一个应用程序通过调用SetWindowsHookEx时指定WM_CALLWNDPROC挂钩类型及其相应挂钩处理过程的首地址来安装挂钩处理过程.
挂钩WM_CALLWNDPROC是在调用函数SendMessage的线程中被调用的,它并非在接受消息的线程中被调用.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.
CallWndRetProc
函数功能:该函数挂钩处理过程是在应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx搭配使用,系统将在调用完 SendMessage之后调用之,该挂钩处理过程可以检查该消息,但不能修改之.
类型HOOKPROC定义了一类指针指向此类回调函数,CallWndRetProc 仅仅是在应用程序或库中定义的相应函数名的位置标志符.
函数原形:LRESULT CALLBACK CallWndRetProc(int nCode,WPARAM wParam,LPARAM lParam);
参数:
nCode:指定该挂钩处理过程是否必须对该消息进行处理,若nCode 是HC_ACTION,则该挂钩处理过程必须处理该消息.若nCode的值小于0,则此挂钩处理过程必须不加处理的将其发送给函数CallNextHookEx并返回由 CallNextHookEx返回的值.
wParam:指示该消息是否由当前线程发出,若该消息由当前线程发出,其值为非0值,否则,其值为0.
lParam:指向一个CWPSTRUCT结构,该结构包含了此消息的详细消息.
返回值:若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值;若nCode的值大于或等于0,我们极力推荐对函数CallNextHookEx进行调用,并返回其返回值.否则,其他安装了挂钩WM_CALLWNDPROCRET的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩处理过程没有调用函数CallNextHookEx,则返回值为0.
备注: 一个应用程序通过调用SetWindowsHookEx时指定WM_CALLWNDPROCRET挂钩类型及其相应挂钩处理过程的首地址来安装挂钩处理过程.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.
CBTProc
函数功能:该函数挂钩处理过程是在应用程序或库中定义的回调函数,它与函数 SetWindowsHookEx配套使用,系统在缉获、创建、销毁、最小化、最大化、移动或改变一个窗口尺寸之前调用它;在结束一个系统命令之前调用它;在将一个鼠标或键盘事件从系统事件队列中删除之前调用它;在设置键盘焦点之前调用它,或在与系统消息队列进行同步之前调用它,一个基于计算机培训(CBT)的应用程序使用此挂钩处理过程来从系统接收有用的通知.
类型HOOKPROC定义了指向此类回调函数的指针,CBTProc是应用程序定义或库定义的相应回调函数名的位置标识符.
函数原形:LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam);
参数:
nCode: 指定一个代码,该代码被此挂钩处理过程用来决定如何处理此消息,该参数可以是下值中的一个:
HCBT_ACTIVATE: 系统将要激活一个窗口.
HCBT_CLICKSKIPPED: 系统已经从系统消息队列中删除了一个鼠标消息,依据收到的这一挂钩代码,一个CBT应用程序必须安装一个 WH_JOURNALPLAYBACK 挂钩处理过程以响应此鼠标消息.
HCBT_CREATEWND:一个窗口将要被创建,系统在发送WM_CREATE 或WM_NCCREATE消息至相应窗口之前调用该挂钩处理过程.若该挂钩处理过程返回一个非0值,则系统销毁该窗口,函数CreateWindow返回值为NULL(0),但消息WM_DESTROY不会被发送至相应窗口,若挂钩处理过程返回为零,窗口将被正常创建.
当HCBT_CREATEWND通知发出之时,相应窗口已被创建,但其最终尺寸及位置可能尚未确定,其父窗口也可能还尚未被创建,存在这样一种可能,消息被发送给新被创建的窗口,虽然该窗口尚未接收到WM_NCCREATE 或 WM_CREATE 消息.也可能通过对CBT_CREATEWND结构的hwndInsertAfter域的修改,来改变新被创建窗口在Z序列中的位置.
HCBT_DESTROYWND:一个窗口将被销毁.
HCBT_KEYSKIPPED:系统已从系统消息队列中删除了一个键盘消息,依据收到的这个挂钩代码,一个CBT应用程序必须安装一个 WH_JOURNALPLAYBACK挂钩处理过程以响应相应的键盘消息.
HCBT_MINMAX: 一个窗口将被最小化或最大化.
HCBT_MOVESIZE: 一个窗口将被移动或改变尺寸.
HCBT_QS: 系统已从系统消息队列中取到一个WM_QUEUESYNC 消息.
HCBT_SETFOCUS: 一个窗口将要获得键盘焦点.
HCBT_SYSCOMMAND: 一个系统命令将被执行.这使得一个CBT应用程序可以避免因热键响应而进行任务切换.
若nCode的值小于0,此挂钩处理过程必须不加处理地将此消息发送给函数CallNextHookEx,并返回函数CallNextHookEx的返回值.
wParam:取决于参数nCode的值,详细信息参见以下的说明部分.
lParam:取决于参数nCode的值,详细信息参见以下的说明部分.
返回值:此挂钩处理过程的返回值决定了系统允许或禁止以下操作之一,对于与以下挂钩代码相应的操作,返回值为0则允许这样的操作,返回值为1则禁止.
HCBT_ACTIVATE
HCBT_CREATEWNDHCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZEHCBT_SETFOCUS
HCBT_SYSCOMMAND
对于与以下CBT挂钩代码相对应的操作,返回值被忽略.
HCBT_CLICKSKIPPED
HCBT_KEYSKIPPED
HCBT_QS
备注:除以下挂钩代码之外,不应当安装WH_JOURNALPLAYBACK挂钩处理过程.
此挂钩处理过程必须放在某个动态链接库中,一个应用程序通过调用函数 SetWindowsHookEx指定WH_CBT 挂钩类型与相应挂钩处理过程首地址来安装挂钩处理过程.
以下列示了参数wParam和lParam与每一种HCBT挂钩代码的关系.
指定一个长指针指向结构CBTACTIVATESTRUCT 的长指针,该结构包含了指向激活窗口的句柄,并指示被激活者是否由于点击而发生改变. |
HCBT_ACTIVATE 指定将要被激活的窗口句柄.
指定一个指向结构MOUSEHOOKSTRUCT的长指针,该结构包含点击测试代码及 鼠标消息发往的窗口句柄.HCBT_ CLICKSKIPPED 值仅当一个WH_MOUSE挂钩被安装了之时才发送一个CBTProc挂钩处理过程,关于点击 测试代码的列表,参见 WM_NCHITTEST. |
HCBT_CLICKSKIPPED 标识鼠标消息从系统消息队列中被删除.
指定一个指向 CBT_CREATEWND结构的长指针,该结构包含窗口的初始化参数,这些参数包括窗口的坐标和尺寸,通过改变这些参数.一个CBTProc挂钩处理过程能够设置窗口的初始尺寸和位置. |
HCBT_CREATEWND 指定新窗口的句柄.
HCBT_DESTROYWND 指定将被销毁的窗口句柄. 未定义,必须设置为0.
指示重复次数,扫描码,键转义码,前驱键状态和上下文代码.仅当WH_KEYBOARD挂钩被安装了之时,此HCBT_KEYSKIPPED值被发送 CBTProc 挂钩处理过程.欲获得更多信息,参见 WM_KEYUP 或WM_KEYDOWN
|
HCBT_KEYSKIPPED 指示虚拟键的代码.
低"字"部分指定一个显示窗口的值(SW_),以指定相应操作,详情参见ShowWindow,高"字"部分未定义.
|
HCBT_MINMAX 指定被最小化或最大化的窗口句柄
指定一个指向RECT结构的长指针,该结构包含窗口的坐标,通过改变结构的值,一个CBTProc的子处理过程能够设置窗口的最终位置. |
HCBT_QS 未定义,必须设置为0 未定义,必须设置为0
HCBT_SETFOCUS 指定获得键盘焦点的窗口句柄. 指示失去键盘焦点的窗口句柄.
指示系统命令的值(SC_)以标识相应系统命令,欲知更多关于系统命令值的信息,参见WM_SYSCOMMAND. |
包含与WM_SYSCOMMAND消息的lParam值相同的数据.若一个系统菜单命令被鼠标选种,则低"字"部分包含光标在屏幕坐标系中的X坐标值,高"字"部分包含Y坐标值,其他情况下,此参数未被使用.
|
HCBT_SYSCOMMAND
类型HOOKPROC定义了一类指针指向此类回调函数,CBTProc 仅仅是在应用程序或库中定义的相应函数名的位置标识符.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.
DebugProc
函数功能:该挂钩处理过程是应用程序或库中定义的回调函数,它与函数SetWindowsHookEx搭配使用,系统在调用与任何挂钩类型和相关的挂钩处理过程之前调用它,系统传送关于被调用的挂钩的信息给DebugProc挂钩处理过程,此挂钩处理过程检查上述信息,并决定该挂钩是否被调用.
类型HOOKPROC定义了指向此类回调函数的指针, DebugProc是应用程序定义或库定义的相应回调函数名的位置标识符.
函数原形:LRESULT CALLBACK DebugProc(int nCode,WPARAM wParam,LPARAM lParam);
参数:
nCode:指示挂钩处理过程是否必须处理此消息.若nCode的值是HC_ACTION,则挂钩处理过程必须处理此消息,若nCode之值小于0,此挂钩处理过程必须将此消息不加处理地传送给函数CallNextHookEx并返回其返回值.
wParam:指示将被调用的挂钩类型,此参数可以为以下值:
WH_CALLWNDPROC: 安装一个监视发送至目标窗口处理过程之的消息的挂钩处理过程,对该消息进行,详情参见CallWndProc挂钩处理过程.
WH_CALLWNDPROCRET :安装一个挂钩处理过程,以监视已刚被目标窗口处理过程处理过了的消息,详情参见 CallWndRetProc 挂钩处理过程.
WH_CBT :安装一个挂钩处理过程,接受对CBT应用程序有用的消息 ,详情参见 CBTProc 挂钩处理过程.
WH_DEBUG:安装一个挂钩处理过程以便对其他挂钩处理过程进行调试, 详情参见DebugProc挂钩处理过程.
WH_FOREGROUNDIDLE:安装一个挂钩处理过程,该挂钩处理过程当应用程序的前台线程即将进入空闲状态时被调用,它有助于在空闲时间内执行低优先级的任务.
WH_GETMESSAGE:安装一个挂钩处理过程对寄送至消息队列的消息进行监视,详情参见 GetMsgProc 挂钩处理过程.
WH_JOURNALPLAYBACK:安装一个挂钩处理过程,对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送.详情参见 JournalPlaybackProc挂钩处理过程.
WH_JOURNALRECORD:安装一个挂钩处理过程,对寄送至系统消息队列的输入消息进行纪录.详情参见JournalRecordProc挂钩处理过程.
WH_KEYBOARD:安装一个挂钩处理过程对击键消息进行监视. 详情参见KeyboardProc挂钩处理过程.
WH_MOUSE:安装一个挂钩处理过程,对鼠标消息进行监视. 详情参见 MouseProc挂钩处理过程.
WH_MSGFILTER:安装一个挂钩处理过程, 以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.详情参见MessageProc挂钩处理过程.
WH_SHELL:安装一个挂钩处理过程以接受对外壳应用程序有用的通知, 详情参见 ShellProc挂钩处理过程.
WH_SYSMSGFILTER:安装一个挂钩处理过程,以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.这个挂钩处理过程对系统中所有应用程序的这类消息都进行监视.详情参见 SysMsgProc挂钩处理过程.
lParam:指向一个DEBUGHOOKINFO结构,该结构包含希望被传送给相应挂钩处理过程的参数,为避免系统调用此挂钩,此挂钩处理过程必须返回一非0值,否则,此挂钩处理过程必须调用函数CallNextHookEx.
备注: 一个应用程序通过调用函数 SetWindowsHookEx指定 WH_DEBUG 挂钩类型与相应挂钩处理过程首地址来安装此挂钩处理过程.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.
ForegroundIdleProc
函数功能:该函数处理过程是应用程序或库定义的回调函数, 它与函数SetWindowsHookEx搭配使用,系统在前台线程进入空闲状态之前调用此函数.
类型HOOKPROC定义了指向此类回调函数的指针, ForegroundIdleProc是应用程序定义或库定义的相应回调函数名的位置标识符.
函数原形:DWORD ForegroundIdleProc(int code,DWORD wParam,LONG lParam);
参数:
Code:指示此挂钩处理过程是否必须处理消息, 若nCode的值是HC_ACTION,则挂钩处理过程必须处理此消息,若nCode之值小于0,则此挂钩处理过程必须将此消息不加处理地传送给函数CallNextHookEx并返回其返回值.
wParam:未被使用.
lParam:未被使用.
返回值: 若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值;若nCode的值大于或等于0,我们极力推荐对函数CallNextHookEx进行调用,并返回其返回值.否则,其他安装了挂钩WH_FOREGROUNDIDLE的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩处理过程没有调用函数CallNextHookEx,则返回值为0.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.
GetMsgProc
函数功能: 该函数处理过程是应用程序或库定义的回调函数, 它与函数SetWindowsHookEx搭配使用,每当函数GetMessage从应用程序的消息队列中获得了一个消息时,系统就调用此函数,在将此获得的消息传送给相应窗口处理过程之前,系统将此消息传送给该挂钩处理过程.
类型HOOKPROC定义了指向此类回调函数的指针, GetMsgProc是应用程序定义或库定义的相应回调函数名的位置标识符.
函数原形:LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam );
参数:
Code: 指示挂钩处理过程是否必须处理此消息.若nCode的值是HC_ACTION,则挂钩处理过程必须处理此消息,若nCode之值小于0,此挂钩处理过程必须将此消息不加处理地传送给函数CallNextHookEx并返回其返回值.
wParam:指示此消息是否已从消息队列中被删除,此参数可以是以下值之一:
PM_NOREMOVE :指出该消息尚未从消息队列中被删除(一个应用程序调用函数PeekMessage ,设置PM_NOREMOVE 标志).
PM_REMOVE: 指出该消息已从消息队列中被删除. (一个应用程序调用函数 GetMessage或PeekMessage, 设置 PM_REMOVE标志.)
lParam:指向结构MSG,该结构包含了关于此消息的详细消息
返回值: 若nCode的值小于0,则此挂钩函数必须返回函数CallNextHookEx所返回的值;若nCode的值大于或等于0,我们极力推荐对函数CallNextHookEx进行调用,并返回其返回值.否则,其他安装了挂钩WM_GETMESSAGE的应用程序将无法收到挂钩通知,从而导致错误的行为.若此挂钩处理过程没有调用函数CallNextHookEx,则返回值为0.
备注:挂钩处理过程GetMsgProc可以检查和修改此消息,在此挂钩处理过程将控制返回给系统之后,函数GetMessage将此修改后的消息返回给最初调用他的应用程序,应用程序通过调用函数SetWindowsHookEx指定WH_GETMESSAGE挂钩类型和相应挂钩处理过程的首地址来安装此挂钩处理过程.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,头文件:winuser.h,库文件:用户定义.
JournalPlaybackProc
函数功能: 该函数处理过程是应用程序或库定义的回调函数, 它与函数SetWindowsHookEx搭配使用.典型地,一个应用程序通过调用此函数来对先前有JournalRecordProc挂钩处理过程纪录的一系列鼠标和键盘消息进行回放.一旦挂钩函数JournalPlaybackProc挂钩处理过程被安装,则通常的鼠标和键盘输入被禁止.
类型HOOKPROC定义了指向此类回调函数的指针, JournalPlaybackProc是应用程序定义或库定义的相应回调函数名的位置标识符.