模拟键盘如何工作?

模拟键盘如何工作?

我读过一些 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就像实际的第二个键盘一样。

这也有可能被恶意使用,因为某些东西根本不必看起来像键盘来为您输入内容(或将其自身呈现为任何其他设备)。

相关内容