前言
我們經(jīng)常在使用一個(gè)串口軟件的時(shí)候,發(fā)現(xiàn)軟件中的端口號(hào)并不是普通的COM1,而是帶有硬件信息的。
那么如果我們使用C#編寫(xiě)軟件時(shí)候,如何獲取到串口的硬件信息呢?
封裝方法
思路就是通過(guò)讀取設(shè)備管理器里的條目來(lái)實(shí)現(xiàn),我這里給大家封裝好了一個(gè)通用的方法。
///
/// 獲取可用端口號(hào)
///
/// 是否使用完全名稱(chēng)
/// 端口號(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,不填的話(huà),就是False。
-END-
-
硬件
+關(guān)注
關(guān)注
11文章
3312瀏覽量
66200 -
端口
+關(guān)注
關(guān)注
4文章
963瀏覽量
32051 -
串口軟件
+關(guān)注
關(guān)注
0文章
6瀏覽量
1674
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論