许多 USB 设备包含一个唯一的序列号(实际上是一个 Unicode 字符串),主机可以将其与 16 位供应商和产品 ID 号结合使用来唯一地标识设备。
我试图弄清楚如何编写一个 Windows 应用程序,该应用程序能够显示连接到系统的所有 USB 人机接口(interface)设备的列表。该列表将为每个 HID 包含一行,包括系统键盘。列表中会有供应商 ID、产品 ID 和序列号的列。
我可以通过使用 SetupDiGetClassDevs
返回的 GUID 调用 HidD_GetHidGuid
并通过重复调用 SetupDiEnumDeviceInterfaces
循环结果来获取 USB HID 列表。然后我可以调用 SetupDiGetDeviceInterfaceDetail
来获取每个设备的路径,我可以用 CreateFile
打开它,只要我小心地请求既不读取也不写入权限,这将被系统键盘拒绝。从那里我可以通过调用 HidD_GetAttributes
来获取供应商和产品 ID 号。
我无法弄清楚如何检索序列号字符串。当我搜索这个问题的解决方案时,我找到了很多关于如何获取 USB 大容量存储设备的序列号的信息,但没有任何信息看起来可能适用于任何其他类型的 USB 设备。我很高兴发现检索序列号字符串的通用方法或特定于 HID 的方法。
我有一种感觉,libusb
的 Win32 端口可以轻松解决这个问题,但不幸的是,我需要一个仅依赖于 Windows 附带的库的解决方案,例如包含上述函数的 setupapi
和 hid
DLL。
任何建议将不胜感激!
最佳答案
您是否尝试过DDK附带的USBVIew源代码。 USBView 工具显示任何 USB 设备的序列号,源代码随 DDK 一起提供。
关于windows - Windows下检索USB键盘的序列号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/723449/