CBTProc

【勇芳软件工作室】汉化HomePreviousNext

CBTProc挂接过程是系统在激活,创建,销毁,最小化,最大化,移动或调整窗口大小之前调用的应用程序定义或库定义的回调函数;完成系统命令之前;在从系统消息队列中删除鼠标或键盘事件之前;在设置键盘焦点之前;或在与系统消息队列同步之前。挂钩过程返回的值确定Windows是否允许或阻止其中一个操作。基于计算机的培训(CBT)应用程序使用此挂接过程从系统接收有用的通知。

LRESULT CALLBACK CBTProc(

INT 【NCODE】,//钩子代码
WPARAM 【wParam中】,//依赖于钩子代码
LPARAM 【lParam的】//依赖于钩子代码
); 

参数

【NCODE】

指定挂钩过程用于确定如何处理消息的代码。此参数可以是以下值之一:

含义
HCBT_ACTIVATE系统即将激活一个窗口。
HCBT_CLICKSKIPPED系统从系统消息队列中删除了一个鼠标消息。收到此挂钩代码后,CBT应用程序必须安装WH_JOURNALPLAYBACK钩子程序以响应鼠标消息。
HCBT_CREATEWND一个窗口即将被创建。在将WM_CREATEWM_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_KEYUPWM_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是应用程序定义或库定义的函数名称的占位符。

也可以看看

CallNextHookEx,CreateWindow,SetWindowsHookEx,WM_SYSCOMMAND