LowLevelMouseProc 函数

说明

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

HOOKPROC 类型定义指向此回调函数的指针。 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 挂钩的其他应用程序不会收到挂钩通知,因此行为不正确。 如果挂钩过程处理了消息,它可能会返回非零值,以防止系统将消息传递给挂钩链的其余部分或目标窗口过程。

注解

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

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

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

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

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

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

另请参阅

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

挂钩

关于挂钩