我的c#app必须管理多个USB设备,这些设备是来自同一制造商的相同产品.
如果用户插入我的设备中的3个,然后拔掉其中一个,我需要知道3个设备中的哪个被拔掉.
但是,当我注册设备并接收WM_DEVICECHANGE通知时,DBT_DEVTYP_DEVICEINTERFACE返回的数据对于每个设备都是相同的.
如果我可以在设备到达或移除时获取USB端口信息,它将解决我的问题,但我找不到办法来做到这一点.
有什么建议?
我对C#一无所知,但在常规C + Win32中,您可以使用SetupAPI函数来枚举总线并探测总线上的所有设备。如果枚举主桥,您应该能够在 USB 层次结构中找到您的设备。我链接到的那篇文章向您展示了如何使用 API,如果您查看 SetupDiGetClassDevs() 系统调用,就会发现有一个 USB 系统总线选项(即参数 2,“Enumerator”)。
另外,如果您下载 Windows 驱动程序工具包,我知道它有一个示例应用程序,可以枚举 USB 总线并提供有关每个 USB 设备的信息。该应用程序使用SetupAPI,它可以作为一个很好的参考。
我知道微软已经逐渐将Win32 API公开为.NET类,但我不确定这个API。