我目前正在迭代连接到我的计算机的USB相机列表,我使用以下代码检索:
DsDevice[] cams = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
然后我从DevicePath为每个设备确定HardwareID和InstanceID值,并为所有设备查找以下注册表项:
HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \枚举\ USB {硬件ID} {实例id} \
然后我读了LocationInformation
子键值。以下是我根据设备插入的USB端口收到的一些示例:
0000.001a.0000.001.003.000.000.000.000
0000.001a.0000.001.004.000.000.000.000
0000.001d.0000.001.008.000.000.000.000
0000.001d.0000.001.007.000.000.000.000
0000.001d.0000.001.005.000.000.000.000
0000.001d.0000.001.006.000.000.000.000
看来第二个块(返回的Split('.')
阵列的索引1)是USB端口所连接的内部USB集线器之间的区别。这是对的吗?
我推断出第五个块(索引4)是USB端口号,但是在我使用的另一台计算机上(Intel Compute Stick),端口号区别实际上发生在第四个块中(指数3)。有没有办法知道我需要根据计算机检查哪个块? (第三方库是可以接受的,但我更倾向于使用.NET的内置功能或者我可以连接的直接Windows API,如果可能的话。)
是否有关于LocationInformation
的每个部分的文档?我用谷歌搜索了一下信息,但是我找不到我正在寻找的东西。也许我只是不知道找到这些信息的最佳搜索词。无论如何,我敢打赌,这个文档对其他StackOverflow用户也非常有用。
谢谢!