我设法使用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可以很好地提取该信息而无需解析该信息?
答案 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);
}