LowLevelMouseProc 函数

说明

SetWindowsHookExA SetWindowsHookExW函数一起使用的应用程序定义或库定义的回调函数。/ 每当新的鼠标输入事件即将发布到线程输入队列时,系统都会调用此函数。

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

LowLevelMouseProc 是应用程序定义的或库定义的函数名称的占位符。

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

参数

nCode [in]

类型: int

挂钩过程用于确定如何处理消息的代码。

如果 nCode 小于零,则挂钩过程必须将消息传递给 CallNextHookEx 函数,而无需进一步处理,并且应返回 CallNextHookEx 返回的值。

此参数的取值可为下列值之一:

含义
HC_ACTION 0 wParamlParam 参数包含有关鼠标消息的信息。

wParam [in]

类型:WPARAM

鼠标消息的标识符。

此参数可以是以下消息之一: WM_LBUTTONDOWNWM_LBUTTONUPWM_MOUSEMOVEWM_MOUSEWHEELWM_RBUTTONDOWNWM_RBUTTONUP

lParam [in]

类型:LPARAM

指向 MSLLHOOKSTRUCT 结构的指针。

返回

类型: LRESULT

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

如果 nCode 大于或等于零,并且挂钩过程未处理消息,强烈建议调用 CallNextHookEx 并返回它返回的值;否则,安装 WH_MOUSE_LL 挂钩的其他应用程序将不会收到挂钩通知,并可能因此行为不正确。

如果挂钩过程处理了消息,它可能会返回非零值,以防止系统将消息传递给挂钩链的其余部分或目标窗口过程。

注解

应用程序通过在调用 SetWindowsHookExA/ SetWindowsHookExW 函数中指定WH_MOUSE_LL挂钩类型和指向挂钩过程的指针来安装挂钩过程。

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

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

挂钩过程处理消息的时间应短于以下注册表项的 LowLevelHooksTimeout 值中指定的数据条目:

HKEY_CURRENT_USER\Control Panel\Desktop

该值以毫秒计。 如果挂钩过程超时,系统会将消息传递到下一个挂钩。 但是,在 Windows 7 及更高版本上,挂钩以静默方式删除,无需调用。 应用程序无法知道挂钩是否已删除。

Windows 10版本 1709 及更高版本 系统允许的最大超时值为 1000 毫秒 (1 秒) 。 如果 LowLevelHooksTimeout 值设置为大于 1000 的值,则系统默认使用 1000 毫秒超时。

注意

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

另请参阅

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

挂钩

关于挂钩