获取串口映射的COM端口号

时间:2024-01-13 13:54:38

背景:近期由于项目需要,需要操作短信猫,当短信猫插入电脑后,会根据当前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 晚