node-hid读取HDWR HD44条码阅读器报错:could not read from HID device
解决Windows11下node-hid读取HDWR HD44条码阅读器失败的问题
核心原因
你的条码阅读器设备信息里usagePage: 1、usage: 6,说明它当前工作在HID键盘仿真模式。Windows系统会独占这类设备的输入权限,node-hid无法直接读取设备数据,这就是报错的根本原因。
具体解决方案
1. 切换条码阅读器的工作模式
大部分条码阅读器支持通过扫描特定设置条码切换工作模式,你需要:
- 查找HDWR HD44的官方说明书,找到切换模式的设置条码(目标模式选USB Raw HID或串口模式,不要选键盘仿真)。
- 扫描对应条码后,设备会退出键盘独占模式,此时node-hid可以正常读取数据。
2. 调整设备路径选择
如果设备有多个HID接口,当前路径末尾的\KBD是键盘接口的标识。你可以修改代码,筛选同vendorId和productId下不带\KBD的接口:
const deviceInfo = devices.find(d => d.vendorId === 1046 && d.productId === 49473 && !d.path.includes('\\KBD') );
3. 改用键盘输入捕获方案(无需切换设备模式)
如果无法切换设备模式,可直接捕获条码器模拟的键盘输入,示例代码(使用iohook库):
const ioHook = require('iohook'); let barcodeBuffer = ''; ioHook.on('keydown', (event) => { // 捕获可打印字符(根据条码器输出调整过滤规则) if (event.rawcode >= 48 && event.rawcode <= 90) { // 数字、字母范围 barcodeBuffer += String.fromCharCode(event.rawcode); } // 条码器通常以回车结束,触发数据处理 if (event.keycode === 28) { console.log('读取到条码:', barcodeBuffer); barcodeBuffer = ''; } }); ioHook.start();
安装依赖:npm install iohook
4. 切换到串口模式后使用serialport读取
如果设备切换到串口模式,可使用serialport库读取数据:
const { SerialPort } = require('serialport'); const port = new SerialPort({ path: 'COM3', // 替换为你的设备串口 baudRate: 9600 // 匹配条码器的波特率 }); port.on('data', (data) => { console.log('读取到条码:', data.toString().trim()); });
安装依赖:npm install serialport
内容的提问来源于stack exchange,提问作者Ja Tutaj
相关产品推荐
相关产品推荐

