我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的com1,而是带有硬件信息的。
那么如果我们使用c#编写软件时候,如何获取到串口的硬件信息呢?
思路就是通过读取设备管理器里的条目来实现,我这里给大家封装好了一个通用的方法。
/// <summary> /// 获取可用端口号 /// </summary> /// <param name="usefullname">是否使用完全名称</param> /// <returns>端口号集合</returns> public static string[] getportnames(bool usefullname = false) { list<string> result = new list<string>(); try { //搜索设备管理器中的所有条目 using (managementobjectsearcher searcher = new managementobjectsearcher("select * from win32_pnpentity")) { var hardinfos = searcher.get(); foreach (var hardinfo in hardinfos) { if (hardinfo.properties["name"].value != null) { string name = hardinfo.properties["name"].value.tostring(); if (name.contains("(com") && name.endswith(")")) { if (usefullname) { result.add(name); } else { //获取端口号 string port = name.substring(name.indexof('(') + 1, name.indexof(')') - name.indexof('(') - 1); //如果是虚拟串口 if (name.contains("->")) { result.add(port.split(new string[] { "->"}, stringsplitoptions.none)[0]); } //如果不是虚拟串口 else { result.add(port); } } } } } } } catch { result = new list<string>(); } return result.toarray(); }
如果我们需要获取带硬件信息,那么usefullname传入true即可。
string[] ports = getportnames(true); foreach (var item in ports) { console.writeline(item); }
如果我们不需要获取带硬件信息的端口号集合,那么usefullname传入false,默认参数是false,不填的话,就是false。
到此这篇关于c#实现获取电脑中的端口号和硬件信息的文章就介绍到这了,更多相关c#获取电脑信息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论