从设备路径中提取VID,PID和Serial的简洁方法

时间:2014-02-10 03:13:46

标签: c# .net winapi usb

我设法使用SetupDiGetDeviceInterfaceDetail提取计算机上所有连接的USB设备的设备路径。它们通常如下所示:

\\?\hid#vid_0461&pid_4d15#6&219e7220&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}

鉴于此,提取视频(0461),pid(4d15)和序列号(6& 219e7220& 1& 0000)的最简洁方法是什么?

我考虑过使用IndexOf(vid_)并从那里读取4个字符(同样适用于其他字符),但这个解决方案看起来很脏。

或者是否有一个已知的Win32 API可以很好地提取该信息而无需解析该信息?

2 个答案:

答案 0 :(得分:0)

我想我在StackOverflow上听说设备实例路径应该是一个不透明的字符串,不推荐解析它。相反,您应该查看设备的Hardware IDs。对不起,这不是一个完整的答案,但它可以让你找到合适的地方。

答案 1 :(得分:0)

您可以使用RegularExpressions。例如提取vid,pid和序列号:

string input ="\\?\hid#vid_0461&pid_4d15#6&219e7220&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}";
Regex rx = new Regex(@"_[0-9a-fA-F]+|\{[0-9a-fA-F\-]+\}");
MatchCollection matches = rx.Matches(input);

for (int i = 0; i< matches.Count; i++){
        console.writeln(matches[i].Value);
}