前言
我們經(jīng)常在使用一個串口軟件的時候,發(fā)現(xiàn)軟件中的端口號并不是普通的COM1,而是帶有硬件信息的。
那么如果我們使用C#編寫軟件時候,如何獲取到串口的硬件信息呢?
封裝方法
思路就是通過讀取設(shè)備管理器里的條目來實現(xiàn),我這里給大家封裝好了一個通用的方法。
///
/// 獲取可用端口號
///
/// 是否使用完全名稱
/// 端口號集合
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
{
//獲取端口號
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);
}
如果我們不需要獲取帶硬件信息的端口號集合,那么usefullname傳入False,默認參數(shù)是False,不填的話,就是False。
-END-
-
硬件
+關(guān)注
關(guān)注
11文章
3444瀏覽量
67038 -
端口
+關(guān)注
關(guān)注
4文章
1006瀏覽量
32648 -
串口軟件
+關(guān)注
關(guān)注
0文章
6瀏覽量
1761
發(fā)布評論請先 登錄
相關(guān)推薦
請問CYT4DN-如何使用PDL驅(qū)動程序文件獲取端口號?
memcached端口號是否必須要修改呢?。。。。?!
labview怎么實現(xiàn)更改USB接口的端口號?。?/a>
理解網(wǎng)絡(luò)端口號
請問zigbee的端口號和短地址有什么區(qū)別?端口號如何知道?
SIM800C為什么要自己設(shè)置端口號
請問SIM800C的端口號不是運營商分配嗎?為什么還要通過AT+CLPORT設(shè)置本地端口號?
怎樣去解決復位端口號增長的問題
常用端口號對照表
udp常用端口號有哪些

評論