我尝试使用全局挂钩使用SetWindowsHookEx
来获取所有击键。
问题是我无法同时使用Global Hooks和Raw Input。
我认为这里肯定存在一些问题,因为在启用原始输入后,Global Hooks会自动被禁用。
答案 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等使用设备,你只需要获取信息......