Barcode Scanner Emulator
条码扫描器如何工作
一次条码扫描看起来是瞬间完成的,但在物理条码和应用中出现的字符之间,其实有四个彼此独立的阶段。理解每个阶段,能让与扫描器相关的缺陷容易诊断得多。
条码扫描的四个阶段
1. 照明与图像采集
激光扫描器用光束扫过条码,并测量反射光强度。基于成像的扫描器(大多数现代手持扫描器和手机摄像头扫描器)用小型 CMOS 传感器采集条码的二维图像,类似一台低分辨率相机。
2. 解码
机载固件分析条宽(对 QR 和 Data Matrix 则分析二维图像),并按具体码制的算法将其解码为原始数字载荷,例如 Code 128、Code 39、EAN-13、QR 等。这一切都发生在扫描器内部,任何数据到达计算机之前就已经完成。
3. 通信
解码后的载荷被传送到主机。传输通常走 USB,绝大多数消费级和工业级扫描器向操作系统呈现为 USB HID 键盘,而不是自定义 USB 类。部分扫描器支持其他模式,例如 USB serial(COM 端口仿真)或 Bluetooth HID,但键盘仿真模式是当今几乎所有在售扫描器的默认模式。
4. 应用输入
因为扫描器扮演键盘,操作系统会把载荷作为一连串按键事件交给当前拥有键盘焦点的应用。应用从不直接与扫描器对话,它只是接收按键,效果和有人飞快地打字完全一样。
为什么大多数扫描器表现得像键盘
HID 键盘模式是几乎所有商用条码扫描器的默认配置,因为它不需要安装驱动程序。任何支持 USB 键盘的操作系统都能开箱即用。
USB 键盘仿真指扫描器固件把每个解码字符映射为键盘会为该字符发送的 USB HID 键码,再通过 USB 中断端点发送标准 HID 键盘报告。
这对测试为何重要: 在应用层,扫描器与键盘无法区分,因此只需在已聚焦的字段里快速打字,或使用检查键盘事件的浏览器工具,就能测试很大一部分由扫描器驱动的行为(见下方链接的工具)。
ENTER 和 TAB 后缀
大多数扫描器被配置为在解码载荷之后追加一次按键后缀,最常见的是 ENTER(回车,0x0D),有时是 TAB(0x09)或自定义序列。这样接收应用无需超时就能知道扫描值在哪里结束。后缀相当于提交信号,类似于在文本框里打完字后按 Enter。
扫描器时序
扫描器会在远不到一秒内传完整条条码载荷,字符之间的间隔常常只有几毫秒。人打出同一串字符时,按键间隔通常是 100–300 毫秒或更长。这一时序差异是许多 POS 和库存应用中“扫描器检测”逻辑的基础:它们寻找异常快速的输入突发,并紧接着一个后缀键。
对你的应用来说,这意味着:若要区分扫描器输入和手工打字,应测量按键间隔。标准浏览器键盘事件不携带输入来源信息,因此没有特殊标志可查。
亲自试一试
使用条码输入测试器扫描真实条码,实时查看捕获值、时序和后缀检测。若要深入了解 keyboard wedge 行为,请继续阅读HID keyboard wedge 说明。