擷取串口映射的COM連接埠號碼
背景:近期由於項目需要,需要操作簡訊貓,當簡訊貓插入電腦後,會根據當前PC狀況,映射COM口,這裡需動態擷取簡訊貓映射的COM連接埠號碼。
程式設計語言C#:
具體代碼如下
public enum HardwareEnum
{
Win32_PnPEntity // 所有裝置
}
/// <summary>
/// 擷取相應COM口號
/// </summary>
private static string getComInfo(HardwareEnum hardType, string propkey)
{
List<string> deviceslist = new List<string>();
StringBuilder comsb = new StringBuilder();
try
{
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select *from " + hardType))
{
var hardInfos = searcher.Get();
foreach (var hardInfo in hardInfos)
{
Object deviceprop=hardInfo.Properties[propkey].Value;
if (deviceprop!=null&&deviceprop.ToString().Contains("COM")) //避免出現空裝置值異常
{
deviceslist.Add(hardInfo.Properties[propkey].Value.ToString());
}
}
searcher.Dispose();
}
string[] devicestemps = deviceslist.ToArray();
foreach (string device in devicestemps)
{
if (device.Contains("AT")) //這裡簡訊貓需操作AT口
{
int index = device.IndexOf("(");
string devicetemp = device.Substring(index + 4); //得到形如"3)"形式
string comnum = devicetemp.Substring(0, devicetemp.Length - 1); //直接得到相應COM連接埠號碼
comsb.Append(comnum + "*"); //用“*”號隔開,當出現多個的時候
}
}
string comsbstring=comsb.ToString();
return comsbstring.Substring(0, comsbstring.Length - 1); //移除最後一個“*”號
}
catch
{
return null;
}
finally
{
deviceslist = null;
}
}
/// <summary>
/// 擷取COM連接埠號碼
/// </summary>
public static string getComNum()
{
string comnums = getComInfo(HardwareEnum.Win32_PnPEntity, "name");
return comnums; //返回多個COM號的組成,可在這裡進行解析,也可在調用時進行解析,這裡不做過多贅述
}
註:1.通過該種方式可以擷取實際你所需要操作的COM連接埠號碼。
2.這裡通過“*”對COM連接埠號碼進行拼接,可以通過解析傳回值,判斷當前時候串連了多個簡訊貓,以便做下一步操作。