CBTProc挂接过程是系统在激活,创建,销毁,最小化,最大化,移动或调整窗口大小之前调用的应用程序定义或库定义的回调函数;完成系统命令之前;在从系统消息队列中删除鼠标或键盘事件之前;在设置键盘焦点之前;或在与系统消息队列同步之前。挂钩过程返回的值确定Windows是否允许或阻止其中一个操作。基于计算机的培训(CBT)应用程序使用此挂接过程从系统接收有用的通知。
LRESULT CALLBACK CBTProc(
INT 【NCODE】, | //钩子代码 |
WPARAM 【wParam中】, | //依赖于钩子代码 |
LPARAM 【lParam的】 | //依赖于钩子代码 |
); |
参数
【NCODE】
指定挂钩过程用于确定如何处理消息的代码。此参数可以是以下值之一:
值 | 含义 |
HCBT_ACTIVATE | 系统即将激活一个窗口。 |
HCBT_CLICKSKIPPED | 系统从系统消息队列中删除了一个鼠标消息。收到此挂钩代码后,CBT应用程序必须安装WH_JOURNALPLAYBACK钩子程序以响应鼠标消息。 |
HCBT_CREATEWND | 一个窗口即将被创建。在将WM_CREATE或WM_NCCREATE消息发送到窗口之前,系统调用挂接过程。如果挂钩过程返回非零值,则系统会销毁该窗口; CreateWindow函数返回NULL,但不会将WM_DESTROY消息发送到窗口。如果挂钩过程返回零,则窗口正常创建。 |
在HCBT_CREATEWND通知时,窗口已创建,但其最终大小和位置可能尚未确定,并且其父窗口可能尚未建立。尽管还没有收到WM_CRETE或WM_CREATE消息,但可以向新创建的窗口发送消息。还可以通过修改CBT_CREATEWND结构的hwndInsertAfter成员来更改新创建的窗口的Z位置的位置。 | |
HCBT_DESTROYWND | 一个窗口即将被毁坏。 |
HCBT_KEYSKIPPED | 系统从系统消息队列中删除了一个键盘消息。收到此挂钩代码后,CBT应用程序必须安装WH_JOURNALPLAYBACK_hook挂钩过程以响应键盘消息。 |
HCBT_MINMAX | 窗口即将被最小化或最大化。 |
HCBT_MOVESIZE | 一个窗口即将被移动或大小。 |
HCBT_QS | 系统从系统消息队列中检索到一条WM_QUEUESYNC消息。 |
HCBT_SETFOCUS | 一个窗口即将接收键盘焦点。 |
HCBT_SYSCOMMAND | 系统命令即将被执行。这允许CBT应用程序通过热键来防止任务切换。 |
如果【NCODE】小于零,挂钩过程必须将消息传递给CallNextHookEx函数,无需进一步处理,并应返回CallNextHookEx返回的值。
【wParam中】
取决于【NCODE】参数。有关详细信息,请参阅以下备注部分。
【lParam的】
取决于【NCODE】参数。有关详细信息,请参阅以下备注部分。
返回值
对于与以下CBT挂钩代码相对应的操作,返回值必须为0以允许操作,或1阻止它:
HCBT_ACTIVATE
HCBT_CREATEWND
HCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZE
HCBT_SETFOCUS
HCBT_SYSCOMMAND
对于与以下CBT挂钩代码相对应的操作,返回值将被忽略:
HCBT_CLICKSKIPPED
HCBT_KEYSKIPPED
HCBT_QS
备注
挂钩过程不应该安装WH_JOURNALPLAYBACK_hook挂接过程,除了上述挂钩代码列表中描述的情况。
此挂接过程必须位于动态链接库(DLL)中。应用程序通过在调用SetWindowsHookEx函数中指定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_)。有关show-window值的列表,请参阅ShowWindow.高阶词是未定义的。 |
HCBT_MOVESIZE | 指定要移动或调整大小的窗口的句柄。 | 指定一个指向包含窗口坐标的RECT结构的长指针。通过更改结构中的值,CBTProc钩子过程可以设置窗口的最终坐标。 |
HCBT_QS | 未定义,必须为零。 | 未定义,必须为零。 |
HCBT_SETFOCUS | 指定获取键盘焦点的窗口的句柄。 | 指定失去键盘焦点的窗口的句柄。 |
HCBT_SYSCOMMAND | 指定指定系统命令的系统命令值(SC_)。有关系统命令值的更多信息,请参阅WM_SYSCOMMAND. | 包含与WM_SYSCOMMAND消息的【lParam的】值相同的数据:如果使用鼠标选择了系统菜单命令,则低位字包含光标的x坐标,屏幕坐标,订单字包含y坐标;否则,不使用参数。 |
CBTProc是应用程序定义或库定义的函数名称的占位符。
也可以看看