许多 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 附带的库的解决方案,例如包含上述函数的 setupapihid DLL。

任何建议将不胜感激!

最佳答案

您是否尝试过DDK附带的USBVIew源代码。 USBView 工具显示任何 USB 设备的序列号,源代码随 DDK 一起提供。

关于windows - Windows下检索USB键盘的序列号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/723449/

10-15 05:32