Barcode Scanner Emulator
HID keyboard wedge 说明
Keyboard wedge 是绝大多数条码扫描器的默认工作模式。本指南说明它是什么、在 USB 层面如何工作,以及测试应用时意味着什么。
什么是 keyboard wedge?
这个说法源自较早的串口扫描器:它们被实实在在地“楔入”键盘和计算机端口之间,截获键盘信号,再把扫描到的字符注入其中。现代扫描器不再需要物理楔入。如今这个词指任何把扫描数据呈现为来自键盘的扫描器,与连接方式无关。
USB HID 与键盘仿真
USB 为键盘、鼠标和类似输入设备定义了 Human Interface Device(HID)类。当扫描器在 USB 上枚举为 HID 键盘时,操作系统加载自带的通用键盘驱动程序,不需要扫描器专用驱动。扫描器固件把每个解码字符转换成物理键盘会发送的 HID 键码,报告通过与任何 USB 键盘相同的中断传输机制送达。
应用如何看到扫描器输入
快速按键突发与人工打字: 扫描器把完整载荷作为一连串快速的 keydown/keyup 对发送,通常不到一秒就结束,与条码长度无关。
没有鼠标事件: HID 键盘模式下的扫描器从不产生指针、点击或焦点事件。若扫描时字段没有焦点,输入会丢失,或进入当时真正拥有焦点的元素。
没有粘贴事件: 数据以逐个按键到达,而不是剪贴板操作,因此 paste 事件处理程序看不到扫描器输入,只监听 paste 的输入掩码会悄悄错过它。
键盘布局问题
为什么会出现错误字符: 扫描器按自身配置的键盘布局,把解码字符映射为 HID 键码。若该布局与操作系统键盘布局不一致,字符可能被调换。典型症状是在 QWERTY 与 AZERTY 系统上,数字或标点被扫成错误字符。
区域设置不匹配: 这是扫描器侧的配置问题,不是软件缺陷。大多数扫描器支持通过手册中的配置条码切换区域设置。修复方法是重新编程扫描器以匹配操作系统区域设置,而不是修改应用代码。
前缀与后缀
扫描器通常支持在载荷前后配置前缀和后缀序列。最常见的后缀是 ENTER(CR,0x0D)、TAB(0x09),偶尔是完整的 CR+LF。前缀较少见,但有时用于在旧式终端应用中把扫描路由到特定字段。
浏览器测试的限制
浏览器看不到原始 USB HID 数据包,不能把已连接的 HID 设备专门枚举为扫描器(WebHID API 除外,而大多数扫描器并不通过它暴露数据),也无法区分 HID 键盘模式扫描器和真实键盘。JavaScript 只能访问浏览器可见的键盘事件(keydown、keyup、keypress),本站工具检查的正是这些事件。
相关内容
使用键盘事件测试器检查原始键盘事件,或阅读ENTER 与 TAB 后缀了解后缀配置细节。