我读过一些 USB 设备模拟键盘,这些设备发送的信息就像是在键盘上键入的信息一样。例如:磁卡读卡器可以使用模拟键盘来提供有关卡的信息。
这是我曾经问过的一个问题键盘、BT 键盘和stdin
这解释了它们是如何工作的。
那么应用程序必须在哪里监听模拟键盘生成的输入呢?
答案1
如果您将两个 USB 键盘连接到您的系统,或者将一个 USB 键盘连接到带有内置键盘的笔记本电脑,您可以在每个键盘上交替键入字符1(或者在一个键盘上使用左侧,在另一个键盘上使用右侧)。除了告诉系统它们是键盘之外,没有什么可做的,就像键盘一样,来自设备的字符将被插入到正确的队列中,应用程序就像正常的键盘输入一样进行监听。
还有其他方法可以获得相同的结果,我曾经在 USB 时代之前使用过条形码扫描仪,必须将其物理插入键盘和主板之间(使用母头和公头 PS/2 连接器),一次扫描即可起作用就像您快速连续按下条形码的数字序列一样。
1特殊按键,例如Fn修改键盘发送的其他按键的键码,因此您不能按下Fn一个键盘并期望修改另一个键盘上的按键。
答案2
如果USB设备本身呈现HID键盘接口,那么从计算机的角度来看,它就是(或“包含”)键盘。相应的HID驱动程序已加载。设备使用相应的 HID 协议通过该接口进行通信。
USB 设备可以有许多接口。设备本身向操作系统发送描述它是什么的信息,USB描述符。您可以在 lsusb () 的详细输出中看到该信息lsusb -v
。相关值为bDeviceClass
, bDeviceSubClass
bDeviceProtocol
。
例如,这是我的鼠标的界面之一,将其自身呈现为键盘。当单击指定键或宏的按钮时,鼠标在此处“键入”:
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
它的排列方式xinput
就像实际的第二个键盘一样。
这也有可能被恶意使用,因为某些东西根本不必看起来像键盘来为您输入内容(或将其自身呈现为任何其他设备)。