5

我正在使用原始输入 API,因为我需要能够以不同的方式响应来自不同 USB HID 设备的密钥,即使它是相同的密钥。

我的窗口WM_INPUT正确接收消息。我可以检索RAWKEYBOARD结构以获得我需要的所有信息。

现在我想阻止那些 USB 设备能够切换 NumLock。我希望原始输入 API 可以让我吞下 NumLock 按键?

我尝试将 WM_INPUT 消息的 Result 设置为 1,但这似乎没有效果。

(我是用 C# 编写的,但由于这都是低级 Windows API,你可能不需要 C# 或 .NET 知识来回答这个问题。)

编辑:哦,是的,我也尝试过使用全局键盘钩子 ( SetWindowsHookEx) 来吞下 NumLock 按键。不幸的是,当我初始化原始输入 API 时,在窗口处于活动状态时不再调用全局键盘挂钩。我也尝试在原始输入之后设置全局钩子,但效果相同。

4

3 回答 3

4

原始输入 API 不支持吞咽按键。

此外,它不与SetWindowsHookEx 同一进程内交互。一旦原始输入 API 被初始化,钩子就被解开。

解决方案是将它们放在不同的进程中。一个进程可以SetWindowsHookEx用来吞下不需要的键,而另一个进程使用原始输入 API 来处理确实通过的按键。然后你只需运行两者。这对我来说很好。

于 2013-05-15T12:44:00.230 回答
0

如上所述,没有直接的可能性,但是您可以通过结合低级键盘挂钩来实现。

就我而言,我需要从条码扫描仪中获取代码,因此只有数字和 ENTER。

我的解决方案是 RawInput 仅从条形码扫描仪设备捕获所有键,而键盘连接仅捕获数字 0-9 和 ENTER 并且根本不返回它。然后,在代码中,我决定是否需要通过以下方式返回密钥:

SendKeys.SendWait("{ENTER}");
于 2017-04-21T12:37:15.120 回答
-2

您只能通过编写内核键盘过滤器驱动程序来“吞下”某些按键。因此,如果您仍然在其中,您将需要一个 DDK。

于 2013-05-11T16:07:45.280 回答