钩

挂钩是系统消息处理机制中的一个点,应用程序可以安装子例程来监视系统中的消息流量,并在消息到达目标窗口过程之前处理某些类型的消息。

在本部分中

名字 描述
挂钩概述 讨论应如何使用挂钩。
使用挂钩 演示如何执行与挂钩关联的任务。
挂钩参考 包含 API 参考。

挂钩函数

名字 描述
CallMsgFilter 将指定的消息和挂钩代码传递给与 WH_SYSMSGFILTER 和 WH_MSGFILTER 挂钩过程关联的挂钩过程。
CallNextHookEx 将挂钩信息传递到当前挂钩链中的下一个挂钩过程。 挂钩过程可以在处理挂钩信息之前或之后调用此函数。
CallWndProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 系统在调用窗口过程处理发送到线程的消息之前调用此函数。
CallWndRetProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 调用 SendMessage 函数后,系统会调用此函数。 挂钩过程可以检查消息;它无法修改它。
CBTProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 系统在激活、创建、销毁、最小化、最大化、移动或调整窗口大小之前调用此函数;完成系统命令之前;从系统消息队列中删除鼠标或键盘事件之前;设置键盘焦点之前;或在与系统消息队列同步之前。 基于计算机的训练(CBT)应用程序使用此挂钩过程从系统接收有用的通知。
DebugProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 系统在调用与任何类型的挂钩关联的挂钩过程之前调用此函数。 系统将有关要调用的挂钩的信息传递给 DebugProc 挂钩过程,该过程检查信息并确定是否允许调用挂钩。
ForegroundIdleProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每当前台线程即将处于空闲状态时,系统就会调用此函数。
GetMsgProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每当 getMessage 或 PeekMessage 函数从应用程序消息队列中检索消息时,系统都调用此函数。 在将检索到的消息返回到调用方之前,系统将消息传递给挂钩过程。
JournalPlaybackProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 通常,应用程序使用此函数播放以前由 JournalRecordProc 挂钩过程记录的一系列鼠标和键盘消息。 只要安装了 JournalPlaybackProc 挂钩过程,将禁用常规鼠标和键盘输入。
JournalRecordProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 该函数记录系统从系统消息队列中删除的消息。 稍后,应用程序可以使用 JournalPlaybackProc 挂钩过程来播放消息。
KeyboardProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每当应用程序调用 GetMessage 或 PeekMessage 函数时,系统都会调用此函数,并且需要处理键盘消息(WM_KEYUP 或 WM_KEYDOWN)。
LowLevelKeyboardProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每次将新的键盘输入事件发布到线程输入队列时,系统都会调用此函数。
LowLevelMouseProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每次将新的鼠标输入事件发布到线程输入队列时,系统都会调用此函数。
MessageProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 系统在对话框、消息框、菜单或滚动条中发生输入事件后调用此函数,但在处理输入事件生成的消息之前。 挂钩过程可以监视特定应用程序或所有应用程序创建的对话框、消息框、菜单或滚动条的消息。
MouseProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每当应用程序调用 GetMessage 或 PeekMessage 函数时,系统都会调用此函数,并且有要处理的鼠标消息。
SetWindowsHookEx 将应用程序定义的挂钩过程安装到挂钩链中。 你将安装挂钩过程来监视系统的某些类型的事件。 这些事件与特定线程相关联,或者与调用线程位于同一桌面中的所有线程相关联。
ShellProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 该函数从系统接收 Shell 事件的通知。
SysMsgProc 与 SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 系统在对话框、消息框、菜单或滚动条中发生输入事件后调用此函数,但在处理输入事件生成的消息之前。 该函数可以监视系统中任何对话框、消息框、菜单或滚动条的消息。
UnhookWindowsHookEx 通过 SetWindowsHookEx 函数删除挂钩链中安装的挂钩过程。

挂钩通知

名字 描述
WM_CANCELJOURNAL 当用户取消应用程序的日记活动时发布到应用程序。 该消息以 NULL 窗口句柄 发布。
WM_QUEUESYNC 由 CBT 应用程序发送,以将用户输入消息与通过 WH_JOURNALPLAYBACK 过程发送的其他消息分开。

挂钩结构

名字 描述
CBT_CREATEWND 包含在创建窗口之前传递给 WH_CBT 挂钩过程的信息,CBTProc。
CBTACTIVATESTRUCT 包含在激活窗口之前传递给 WH_CBT 挂钩过程的信息,CBTProc。
CWPRETSTRUCT 定义传递给 WH_CALLWNDPROCRET 挂钩过程的消息参数,CallWndRetProc。
CWPSTRUCT 定义传递给 WH_CALLWNDPROC 挂钩过程的消息参数,CallWndProc。
DEBUGHOOKINFO 包含传递给 WH_DEBUG 挂钩过程的调试信息,DebugProc。
EVENTMSG 包含有关发送到系统消息队列的硬件消息的信息。 此结构用于存储 JournalPlaybackProc 回调函数的消息信息。
KBDLLHOOKSTRUCT 包含有关低级别键盘输入事件的信息。
MOUSEHOOKSTRUCT 包含有关传递给 WH_MOUSE 挂钩过程的鼠标事件的信息,MouseProc。
MOUSEHOOKSTRUCTEX 包含有关传递给 WH_MOUSE 挂钩过程的鼠标事件的信息,MouseProc。
MSLLHOOKSTRUCT 包含有关低级别鼠标输入事件的信息。

SetWinEventHook