【问题标题】:Reading from a USB HID device that behaves like a keyboard从行为类似于键盘的 USB HID 设备读取
【发布时间】:2020-02-29 05:11:08
【问题描述】:
我正在尝试使用 hidapi (https://github.com/signal11/hidapi) 从行为类似于键盘的条码扫描器读取输入。显然,操作系统不允许我访问扫描仪,因为它的行为类似于键盘,并且出于安全原因,操作系统拥有所有键盘和鼠标设备。此条码扫描器的制造商不提供任何驱动程序。有没有办法阻止操作系统拥有这个条码扫描仪,或者有办法把它变成一个串口并从中读取?
如果没有解决方法,有没有人知道便宜的条形码扫描仪,它的行为不像键盘,这样我就可以使用 hidapi 访问它?或者我怎么知道条形码不会像键盘一样?这是一个非常具体的问题,大多数卖家都不知道如何回答。
谢谢。
【问题讨论】:
标签:
windows
keyboard
barcode-scanner
hid
【解决方案1】:
仅模拟键盘输入的设备(例如条码扫描器)无法以编程方式进行控制,而不是交互式设备(例如游戏控制器)。
您只需等待条形码数据作为键盘输入数据被通知。
即使您不拥有该设备,它也会通知您。换句话说,您需要拥有键盘焦点。就是普通的Windows编程知识。
许多键盘输入条码扫描器能够自定义附加在前后的前缀/后缀代码,以识别条码数据输入。
它们可以通过读取设置条码进行自定义。
在应用程序中一一查看通知的键码,如果有特殊数据,请作为条码数据处理。
【解决方案2】:
“操作系统”是指 Windows 吗?其他操作系统通常提供拦截击键的方法。例如,Linux 有 input 子系统,它可以让您拦截键盘事件,例如按键被按下和释放。不幸的是,这些留给您自己转换为 ASCII/UTF-8 字符。
无论操作系统如何,一个更简单的选择可能是寻找模拟 USB 串行设备的条形码扫描仪。在 Windows 中,系统会显示为 COMx,在 Linux 中显示为 /dev/ttyUSBx 等。然后您可以使用串行端口库从中读取数据,而无需担心键盘焦点。