我可以同时使用Global Hooks和Raw Input吗?

时间:2011-04-13 05:21:45

标签: .net winapi hook keyboard-hook setwindowshookex

我尝试使用全局挂钩使用SetWindowsHookEx来获取所有击键。

问题是我无法同时使用Global Hooks和Raw Input。

我认为这里肯定存在一些问题,因为在启用原始输入后,Global Hooks会自动被禁用。

2 个答案:

答案 0 :(得分:3)

谁告诉你他们需要一起使用?如果您的应用程序已注册处理原始输入,则绝对没有理由安装全局挂钩。原始输入模型的重点是应用程序接收来自连接到计算机的任何HID的原始输入的通知和处理。

而是,您监听WM_INPUT message,通过调用RegisterRawInputDevices function将其发送到应用程序的消息队列,以查找您已注册的任何HID。收到此消息后,您的应用程序应使用RAWINPUT消息的lParam参数中包含的WM_INPUT句柄调用GetRawInputData function。示例代码可用here

或者,您可以对原始数据进行缓冲读取。这对于一次生成大量输入的设备更有用。使用此方法,您可以调用GetRawInputBuffer function,它返回RAWINPUT个结构的数组。同样,示例代码可用here

原始输入函数的主题阅读是here on MSDN

答案 1 :(得分:1)

对于LRESULT WindowProcedure回调已经检查过的原始输入,您不需要挂钩。如果像mouse_pos,mouse_click(以及你可以通过计数器确定的点击次数),key_input等使用设备,你只需要获取信息......