LowLevelKeyboardProc 函数

说明

SetWindowsHookEx 函数一起使用的应用程序定义或库定义的回调函数。 每当新的键盘输入事件要发布到线程输入队列中时,系统都会调用此函数。

注意: 当调用此回调函数以响应键状态的变化时,回调函数在更新密钥的异步状态之前调用。 因此,无法通过从回调函数中调用 GetAsyncKeyState 来确定密钥的异步状态。

HOOKPROC 类型定义指向此回调函数的指针。 LowLevelKeyboardProc 是应用程序定义或库定义的函数名称的占位符。

LRESULT CALLBACK LowLevelKeyboardProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

parameters

代码 [in]

类型 :int

挂钩过程用于确定如何处理消息的代码。 如果 nCode 小于零,挂钩过程必须将消息传递给 CallNextHookEx 函数,而无需进一步处理,并且应返回 CallNextHookEx 返回的值。 此参数的取值可为下列值之一:

含义
HC_ACTION 0 wParam 和 lParam 参数包含有关键盘消息的信息。

wParam [in]

类型 :WPARAM

键盘消息的标识符。 此参数可以是以下消息之一:WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN 或 WM_SYSKEYUP。

lParam [in]

类型 :LPARAM

指向 KBDLLHOOKSTRUCT 结构的 指针。

返回

类型 :LRESULT

如果 nCode 小于零,挂钩过程必须返回 CallNextHookEx 返回的值

如果 nCode 大于或等于零,并且挂钩过程未处理消息,强烈建议调用 CallNextHookEx 并返回返回的值;否则,安装了挂钩 WH_KEYBOARD_LL 不会收到挂钩通知,因此可能行为不正确。 如果挂钩过程处理了消息,则它可能会返回非零值,以防止系统将消息传递到挂钩链或目标窗口过程的其余部分。

备注

应用程序在调用 SetWindowsHookEx 函数时,WH_KEYBOARD_LL挂钩类型和指向挂钩过程指针来安装挂钩过程。

此挂钩在安装它的线程的上下文中调用。 调用通过向安装挂钩的线程发送消息进行。 因此,安装挂钩的线程必须具有消息循环。

键盘输入可以来自本地键盘驱动程序,也可以来自对 keybd_event 函数的 调用。 如果输入来自对 keybd_event 的调用,则输入已"注入"。 但是,WH_KEYBOARD_LL挂钩不会注入到另一个进程中。 相反,上下文切换回安装挂钩的进程,并在其原始上下文中调用它。 然后,上下文切换回生成事件的应用程序。

挂钩过程应在比以下注册表项的 LowLevelHooksTimeout 值中指定的数据条目更少的时间 处理消息:HKEY_CURRENT_USER\Control Panel\Desktop。

该值以毫秒计。 如果挂钩过程时间过长,系统会将消息传递给下一个挂钩。 但是,在 Windows 7 及更高版本上,挂钩在未调用的情况下以无提示方式删除。 应用程序无法确定是否删除了挂钩。

注意:调试挂钩无法跟踪此类低级别键盘挂钩。 如果应用程序必须使用低级别挂钩,则它应在将工作传递给工作线程的专用线程上运行挂钩,然后立即返回。 在大多数情况下,应用程序需要使用低级别挂钩,应改为监视原始输入。 这是因为原始输入可以异步监视面向其他线程的鼠标和键盘消息,这比低级别挂钩更有效地。 有关原始输入详细信息,请参阅 原始输入

另请参阅

CallNextHookEx

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

挂钩

关于挂钩