我正在使用 Raw Input API ,因为我需要能够以不同方式响应来自不同USB HID设备的密钥,即使它是相同的密钥。
我的窗口正确收到WM_INPUT
条消息。我可以检索RAWKEYBOARD
structure以获取我需要的所有信息。
现在我想阻止这些USB设备切换NumLock。我希望Raw Input API可以允许我吞下NumLock按键吗?
我已经尝试将WM_INPUT消息的结果设置为1,但这似乎没有效果。
(我在C#中写这个,但由于这是所有低级Windows API,你可能不需要知道C#或.NET来回答这个问题。)
编辑:哦,是的,我也尝试使用全局键盘钩子(SetWindowsHookEx
)来吞下NumLock按键。不幸的是,只要我初始化Raw Input API,就会在窗口处于活动状态时不再调用全局键盘钩子。我也尝试在原始输入之后设置全局钩子,但效果相同。
答案 0 :(得分:3)
Raw Input API不支持吞咽按键。
此外,它不会与同一进程中的SetWindowsHookEx
进行交互。一旦Raw Input API被初始化,钩子就会被取消挂钩。
解决方案是将它们放在单独的进程中。一个进程可以使用SetWindowsHookEx
来吞下不需要的密钥,而另一个进程使用Raw Input API来处理通过的密钥。那你就跑两个。这对我来说很好。
答案 1 :(得分:0)
如上所述,没有直接的可能性,但您可以通过组合低级键盘钩子来实现。
在我的情况下,我需要从条形码扫描器中捕获代码,以便只有数字结束ENTER。
我的解决方案是RawInput仅从条形码扫描设备捕获所有密钥。键盘连接只捕获数字0-9和ENTER,并且根本不返回它。然后在代码中我决定是否需要返回密钥:
SendKeys.SendWait("{ENTER}");
答案 2 :(得分:-2)
你可以吞下"一些按键只能通过编写内核键盘过滤器驱动程序。所以,如果你还在,你需要一个DDK。