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_CREATEWM_NCCREATE 消息发送到窗口之前,系统会调用挂钩过程。 如果挂钩过程返回非零值,则系统会销毁窗口; CreateWindow 函数返回 NULL,但 不会将WM_DESTROY 消息发送到窗口。 如果挂钩过程返回零,则正常创建窗口。

    发出HCBT_CREATEWND 通知时,窗口已创建,但其最终大小和位置可能尚未确定,并且可能尚未建立其父窗口。 可以将消息发送到新创建的窗口,但尚未收到 WM_NCCREATEWM_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_挂钩代码的 wParamlParam 参数。

    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_KEYUPWM_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)

    另请参阅

    CallNextHookEx

    CreateWindowA/CreateWindowW

    SetWindowsHookExA/SetWindowsHookExW

    WM_SYSCOMMAND消息

    挂钩