前言
我們經(jīng)常在使用一個(gè)串口軟件的時(shí)候,發(fā)現(xiàn)軟件中的端口號(hào)并不是普通的COM1,而是帶有硬件信息的。
那么如果我們使用C#編寫軟件時(shí)候,如何獲取到串口的硬件信息呢?
封裝方法
思路就是通過讀取設(shè)備管理器里的條目來實(shí)現(xiàn),我這里給大家封裝好了一個(gè)通用的方法。
///
/// 獲取可用端口號(hào)
///
/// 是否使用完全名稱
/// 端口號(hào)集合
public static string[] GetPortNames(bool usefullName = false)
{
List<string> result = new List<string>();
//搜索設(shè)備管理器中的所有條目
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
{
//獲取端口號(hào)
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);
}
}
}
}
}
}
return result.ToArray();
}
方法使用
如果我們需要獲取帶硬件信息,那么usefullname傳入True即可。
string[] ports = GetPortNames(true);
foreach (var item in ports)
{
Console.WriteLine(item);
}
如果我們不需要獲取帶硬件信息的端口號(hào)集合,那么usefullname傳入False,默認(rèn)參數(shù)是False,不填的話,就是False。
-END-
-
硬件
+關(guān)注
關(guān)注
11文章
3461瀏覽量
67202 -
端口
+關(guān)注
關(guān)注
4文章
1045瀏覽量
32727 -
串口軟件
+關(guān)注
關(guān)注
0文章
6瀏覽量
1776
發(fā)布評(píng)論請(qǐng)先 登錄
如何通過已占用的端口號(hào)找到占用端口的容器?

請(qǐng)問CYT4DN-如何使用PDL驅(qū)動(dòng)程序文件獲取端口號(hào)?
memcached端口號(hào)是否必須要修改呢!!!!!!
labview怎么實(shí)現(xiàn)更改USB接口的端口號(hào)啊?
理解網(wǎng)絡(luò)端口號(hào)
請(qǐng)問zigbee的端口號(hào)和短地址有什么區(qū)別?端口號(hào)如何知道?
SIM800C為什么要自己設(shè)置端口號(hào)
請(qǐng)問SIM800C的端口號(hào)不是運(yùn)營(yíng)商分配嗎?為什么還要通過AT+CLPORT設(shè)置本地端口號(hào)?
怎樣去解決復(fù)位端口號(hào)增長(zhǎng)的問題
常用端口號(hào)對(duì)照表
udp常用端口號(hào)有哪些

評(píng)論