背景:近期由于项目需要,需要操作短信猫,当短信猫插入电脑后,会根据当前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("("); ); //得到形如"3)"形式 , devicetemp.Length - ); //直接得到相应COM端口号 comsb.Append(comnum + "*"); //用“*”号隔开,当出现多个的时候 } } string comsbstring=comsb.ToString(); , comsbstring.Length - ); //移除最后一个“*”号 } 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端口号进行拼接,可以通过解析返回值,判断当前时候连接了多个短信猫,以便做下一步操作。
by ShawnChen 2017.6.26 晚