挂钩

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

本节内容

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

挂钩函数

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