我正在尝试为条形码扫描仪开发独立于设备的库,它必须在Windows环境中工作.
我已经在这个领域做了一些研究,afaik这个问题的大部分解决方案都取决于具体的设备VID和PID(RawInput @ filter by vid&pid string),在我的情况下这是不可接受的,因为我正在尝试开发一个独立的设备解决方案,将与任何USB条形码扫描仪一起使用.
实际上这件事非常具有挑战性,至少对我来说,这里有一些确切的要求.此外,我不能要求用户热插拔设备(在这种情况下,我只能检测插入的设备并提取它的视频/ pid).另外我不能使用设备的VID和PID数据库.一般来说,我实际上根本不能使用vid和pid.
另外我不能以任何方式重新编程条形码扫描仪,除非它是从我的程序完成的(也许我可以发送一些条形码扫描器特定的IOCTL,这将使它回答我?).
目前我将使用此问题中提出的解决方案: 使用USB条形码扫描仪读取条形码,同时忽略键盘数据输入,而扫描仪产品ID和供应商ID未知
此外,我已经看到商业图书馆(这是一个没有任何来源和任何有关如何实施的信息,但考虑到他们在他们的更改日志中有一些单词"Perfomance counter",我猜他们在上面的链接中使用了解决方案),实现此功能,但它在x64系统中不起作用.可能是因为代码混乱或因为它可能使用某种过滤器(迷你)驱动程序.它是加密的,我无法重新分配它.
我的确切问题是: 有没有办法确定这个HID键盘实际上不是键盘,而是条形码扫描仪?我在Win 7 x64上看到它连接的是条码扫描器,而不是键盘(这是一个系统错误,或者某种类型).
正是我现在正在做的事情:
我目前要做的是:
我在C++,纯WinAPI上开发它,它将是一个DLL库,并且可以在x32-86和x32-64架构上的Windows XP,Vista,7,8中工作.
更新0: 刚刚发现条形码扫描器在USB规范中有自己的用法页面和用法:http://www.usb.org/developers/devclass_docs/pos1_02.pdf
根据该文档,USB条形码扫描器具有UsagePage 0x8C和Usage 0x02.不幸的是我没能将它用作RAWINPUTDEVICE.dwUsage和RAWINPUTDEVICE.dwUsagePage.可能是因为系统安装了它的usb键盘驱动程序,在用户模式下,它与真正的USB键盘无法区分.这些值可能在kernelmode环境中可用(其中一个选项是开发hid过滤器驱动程序).