2010-05-06 231 views
5

我的c#应用程序必须管理多个USB设备,它们是同一制造商的同一产品。如何判断USB设备插入哪个端口?

如果用户插入我的设备中的3个,然后拔出其中一个,我需要知道3个设备中的哪个被拔出。

但是,当我注册设备并收到WM_DEVICECHANGE通知时,从DBT_DEVTYP_DEVICEINTERFACE返回的数据对于每个设备都是相同的。

如果我可以得到USB端口信息,当设备到达或被删除它会解决我的问题,但我找不到方法来做到这一点。

有什么建议吗?

+0

USB设备驱动程序是否提供任何方法来获取序列号或任何其他识别信息? – whatsisname 2010-05-06 18:32:50

回答

2

我对C#一无所知,但在常规C + Win32中,您可以使用SetupAPI functions来枚举总线并探测总线上的所有设备。如果枚举主桥,则应该能够在USB层次结构中找到您的设备。我链接的那篇文章向您展示了如何使用API​​,如果您查看SetupDiGetClassDevs()系统调用,则可以选择USB系统总线(即参数2,“枚举器”)。另外,如果您下载Windows驱动程序工具包,我知道它有一个示例应用程序,它可以枚举USB总线并提供有关每个USB设备的信息。该应用程序使用SetupAPI,它可能是一个很好的参考。

我知道Microsoft已经逐渐将Win32 API公开为.NET类,但我不确定这个API。

+0

您可以在C#.Net中使用Win32 API函数。平台调用教程:http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx – Brian 2010-05-06 18:50:42

相关问题