5

我有一些可以处理各种 USB 接口(COMM 仿真、HID 键盘、HID POS 等)的条形码扫描仪设备。问题是,虽然我可以判断设备是否处于 HID 模式,但我需要能够确定它是 HID 键盘还是 HID POS。

有没有办法使用 Win32 C++ 来确定这一点,最好是使用内置的 Windows HID 库(hidsdi.h)?

4

3 回答 3

3

您可以使用HidD_GetHidGuid获取设备的唯一 GUID。设备接口 guid 由每个设备/应用程序软件供应商、Microsoft 或第三方根据他们认为合适的方式定义。在某些情况下,指南是公开的并且是公共知识并且是标准接口,在某些情况下它们不是。

您还可以使用 Microsoft 的USBView 实用程序,它可以让您浏览 USB 树,或者您可以查看注册表并查看是否可以找到设备的 GUID。query如果配置数据不存在或除了通用设备之外它没有显示自身(如果您的设备支持),您可能仍然需要您的设备来确定设备类型。

有两种类型的 GUID:设备类和设备接口。一个设备只能是一类的一部分。不幸的是,设备类和设备接口 GUID 有时相同,从而使开发人员感到困惑。在 WinXP DDK 中,创建了一些标准来尝试使 GUID 的定义不那么混乱。

另请参阅上一个 SO 问题:对所有 USB 设备使用 RegisterDeviceNotification()。

于 2010-01-18T14:28:01.973 回答
1

以下是可能的 HID Guid 列表:http: //msdn.microsoft.com/en-us/library/ms791134.aspx并按照 Roboto 的建议使用 HidD_GetHidGuid

于 2010-01-18T14:36:37.820 回答
1

您需要使用 HidP_ 函数来检查隐藏报告功能。找出 HIDPOS 设备提供了哪些功能(用法),并使用 HidD_GetPreparsedData()、HidP_GetCaps() 和 HidP_GetValueCaps(和/或 ..ButtonCaps 等)检查这些用法是否存在。查找示例的好地方是Jan Axelson 的页面。如果存在使用情况,那么您就拥有了 POS 设备。如果不是,那么它必须是键盘(假设您已确认设备已连接。)

于 2010-02-14T15:51:33.187 回答