从特定USB键盘捕获/挂钩事件

时间:2014-03-17 20:26:10

标签: vb.net keyboard usb hid keyboard-hook

我有2个USB HID键盘。它们具有不同的VID和PID。

现在我想在VB.NET中,在我的应用程序启动时设置一个系统全局钩子,所以它只是" Catch"来自其中一个键盘的事件。

例如,如果我打开记事本,并在Keyboard1上输入VID 04F3和PID 0103,我希望它在正常情况下显示在记事本中,我的应用程序应该忽略输入。性能最佳的是我的应用程序甚至不需要传递事件。

但是如果我在键盘2上输入VID 13BA和PID 0018的东西,我希望键盘上的输入是"吸掉"由我的应用程序作为服务运行。记事本中没有任何东西出现。我的应用程序将根据Keyboard2的输入做出反应。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

您通常可以通过在Kbdclass驱动程序上注入过滤器驱动程序来挂钩键盘事件,如以下链接所述。

http://msdn.microsoft.com/en-us/library/windows/hardware/jj128406(v=vs.85).aspx

报告格式描述为KEYBOARD_INPUT_DATA。

如果您只想挂钩某些USB键盘,则必须在HIDclass和HID传输(hidusb.sys)之间注入过滤器驱动程序。 HID传输驱动程序以HID输入报告的形式报告键盘事件,并且它在各个键盘之间变化。因此,通过位于hidusb.sys上的过滤器驱动程序来挂钩/阻止键盘输入是理论上可行的。

但是,您必须知道或对输入报告的格式进行逆向工程,您感兴趣的键盘会报告每个键输入。