【问题标题】:Classification of USB devices connected连接的 USB 设备的分类
【发布时间】:2015-06-24 19:09:20
【问题描述】:

我正在编写一个 C# 应用程序,用于监视和记录连接到 Windows 系统的不同 USB 设备。使用 Window 的设置 API,我可以获得 VID、PID、硬件 ID 和友好名称等详细信息。我想问的是,在 Windows 中有没有办法检查连接的设备是智能手机、打印机、大容量存储设备还是调制解调器?

注意:使用SetupGerDeviceRegistryProperty() 我可以获得设备描述,但对于所有设备,它显示设备描述是 USB 复合设备。

【问题讨论】:

  • 也许是“设备类别”?
  • 在设备管理器中,属性之一是“设备类别”。这可能包含您想要的信息 - 至少,它将我的手机列为电话。我不确定这在 API 方面是什么意思,但应该不难找到 - 但请先检查设备管理器,看看这些信息是否真的对你有用。
  • 是的。但我想要一个解决方案,我可以通过编程方式获得该分类
  • 您可以从设备管理器获得的一切,您都可以从 API 获得。猜猜你想要DEVPKEY_DeviceDisplay_Category

标签: winforms winapi c#-4.0 usb systems-programming


【解决方案1】:

您可以使用SetupDiGetDeviceRegistryPropertySPDRP_SERVICE 参数来获取为设备节点安装的驱动程序的名称。驱动程序的名称通常表明所连接的设备类型,只要它使用的是 Windows 的标准驱动程序。您还可以查看SPDRP_COMPATIBLEIDS,它们是用于选择那些标准驱动程序的 ID。实际上SPDRP_CLASSSPDRP_CLASSGUID 可能是最好的;我认为其中之一对应于设备在设备管理器中显示的类别。

听起来您的设备是复合设备,因此您需要访问复合设备的子设备,而不是复合设备本身。一种方法是调用SetupDiGetClassDevs(NULL, "USB", NULL, 0),这将返回一个设备信息集,其中包含所有 USB 设备及其所有子设备。

【讨论】:

  • 感谢您接受我的回答。为了帮助未来的读者,您能否说出您最终使用了哪些注册表属性?我的回答提到了四种不同的。
猜你喜欢
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2014-07-31
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多