CBTProc 回调函数
与 SetWindowsHookExA SetWindowsHookExW函数一起使用的应用程序定义或库定义的回调函数。/ 系统在激活、创建、销毁、最小化、最大化、移动或调整窗口大小之前调用此函数;在完成系统命令之前;从系统消息队列中删除鼠标或键盘事件之前;设置键盘焦点之前;或在与系统消息队列同步之前。 基于计算机的训练 (CBT) 应用程序使用此挂钩过程从系统接收有用的通知。
语法
LRESULT CALLBACK CBTProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
参数
nCode [in]
类型: int挂钩过程用于确定如何处理消息的代码。 如果 nCode 小于零,则挂钩过程必须将消息传递给 CallNextHookEx 函数,而无需进一步处理,并且应返回 CallNextHookEx 返回的值。 此参数的取值可为下列值之一:
值 含义 HCBT_ACTIVATE 5 系统即将激活窗口。
HCBT_CLICKSKIPPED 6 系统已从系统消息队列中删除鼠标消息。 收到此挂钩代码后,CBT 应用程序必须安装 WH_JOURNALPLAYBACK 挂钩过程以响应鼠标消息。
HCBT_CREATEWND 3 即将创建一个窗口。 在将 WM_CREATE 或 WM_NCCREATE 消息发送到窗口之前,系统会调用挂钩过程。 如果挂钩过程返回非零值,则系统会销毁窗口; CreateWindow 函数返回 NULL,但 不会将WM_DESTROY 消息发送到窗口。 如果挂钩过程返回零,则正常创建窗口。
在 发出HCBT_CREATEWND 通知时,窗口已创建,但其最终大小和位置可能尚未确定,并且可能尚未建立其父窗口。 可以将消息发送到新创建的窗口,但尚未收到 WM_NCCREATE 或 WM_CREATE 消息。 还可以通过修改 CBT_CREATEWND 结构的hwndInsertAfter 成员来更改新创建的窗口的 z 顺序中的位置。
HCBT_DESTROYWND 4 一个窗口即将被销毁。
HCBT_KEYSKIPPED 7 系统已从系统消息队列中删除键盘消息。 收到此挂钩代码后,CBT 应用程序必须安装 WH_JOURNALPLAYBACK 挂钩过程以响应键盘消息。
HCBT_MINMAX 1 窗口即将最小化或最大化。
HCBT_MOVESIZE 0 即将移动窗口或调整其大小。
HCBT_QS 2 系统已从 系统消息队列 中检索WM_QUEUESYNC消息。
HCBT_SETFOCUS 9 窗口即将接收键盘焦点。
HCBT_SYSCOMMAND 8 即将执行系统命令。这允许 CBT 应用程序阻止通过热键切换任务。
wParam [in]
类型:WPARAM取决于 nCode 参数。 有关详细信息,请参阅以下“备注”部分。
lParam [in]
类型:LPARAM取决于 nCode 参数。 有关详细信息,请参阅以下“备注”部分。
返回值
类型:****
类型:LRESULT
挂钩过程返回的值确定系统是允许还是阻止这些操作之一。 对于对应于以下 CBT 挂钩代码的操作,返回值必须为 0 以允许操作,或 1 表示阻止此操作。
- HCBT_ACTIVATE
- HCBT_CREATEWND
- HCBT_DESTROYWND
- HCBT_MINMAX
- HCBT_MOVESIZE
- HCBT_SETFOCUS
- HCBT_SYSCOMMAND
对于对应于以下 CBT 挂钩代码的操作,将忽略返回值。
- HCBT_CLICKSKIPPED
- HCBT_KEYSKIPPED
- HCBT_QS
注解
HOOKPROC 类型定义指向此回调函数的指针。 CBTProc 是应用程序定义或库定义的函数名称的占位符。
挂钩过程不应安装 WH_JOURNALPLAYBACK 挂钩过程,除非在上述挂钩代码列表中描述的情况。
应用程序通过在调用 SetWindowsHookExA/ SetWindowsHookExW 函数中指定WH_CBT挂钩类型和指向挂钩过程的指针来安装挂钩过程。
下表描述了每个HCBT_挂钩代码的 wParam 和 lParam 参数。
值 wParam lParam HCBT_ACTIVATE 指定要激活的窗口的句柄。 指定指向 CBTACTIVATESTRUCT 结构的长指针,该结构包含活动窗口的句柄,并指定激活是否因鼠标单击而更改。 HCBT_CLICKSKIPPED 指定从系统消息队列中删除的鼠标消息。 指定指向 MOUSEHOOKSTRUCT 结构的长指针,该结构包含命中测试代码和鼠标消息所针对的窗口的句柄。 仅当安装了WH_MOUSE挂钩时,HCBT_CLICKSKIPPED值才会发送到 CBTProc 挂钩过程。 有关命中测试代码的列表,请参阅 WM_NCHITTEST。
HCBT_CREATEWND 指定新窗口的句柄。 指定指向包含窗口初始化参数 的CBT_CREATEWND 结构的长指针。 参数包括窗口的坐标和尺寸。 通过更改这些参数, CBTProc 挂钩过程可以设置窗口的初始大小和位置。 HCBT_DESTROYWND 指定要销毁的窗口的句柄。 未定义,必须设置为零。 HCBT_KEYSKIPPED 指定虚拟密钥代码。 指定重复计数、扫描代码、键转换代码、以前的键状态和上下文代码。 仅当安装了WH_KEYBOARD挂钩时,HCBT_KEYSKIPPED值才会发送到 CBTProc 挂钩过程。 有关详细信息,请参阅 WM_KEYUP 或 WM_KEYDOWN。 HCBT_MINMAX 指定要最小化或最大化的窗口的句柄。 在低序字中,指定一个显示窗口值 (SW_) 指定操作。 有关显示窗口值的列表,请参阅 ShowWindow。 高序字未定义。 HCBT_MOVESIZE 指定要移动或调整大小的窗口的句柄。 指定指向包含窗口坐标的 RECT 结构的长指针。 通过更改结构中的值, CBTProc 挂钩过程可以设置窗口的最终坐标。 HCBT_QS 未定义,必须为零。 未定义,必须为零。 HCBT_SETFOCUS 指定获得键盘焦点的窗口的句柄。 指定失去键盘焦点的窗口的句柄。 HCBT_SYSCOMMAND ) 指定系统命令 (SC_指定 系统命令值。 有关系统命令值的详细信息,请参阅 WM_SYSCOMMAND。 包含与WM_SYSCOMMAND消息的 lParam 值相同的数据:如果使用鼠标选择系统菜单命令,则低序单词包含光标的 x 坐标(以屏幕坐标表示),高序字包含 y 坐标;否则,不使用 参数。 有关更多详细信息,请参阅 Windows 事件。
要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h(包括 Windows.h) 另请参阅