C# 一种通过设备管理器获取串口号的方式

1、目前只在 win10 版本上验证过;

2、通过读取设备管理器端口方式添加串口;

3、可以添加一般串口、虚拟串口,同时解决端口名存在多个“()”的情形;

4、在全名和端口号添加方式中,均在端口号后增加一个“ ”,方便后续处理;

5、做了一个简易的冒泡排序,端口号做升序排序;

6、需要传入两个参数,全名添加 usefullName、升序排序 isSort;

public static string[] GetPortNames(bool usefullName = true, bool isSort = true)
        {
            List<string> result = new List<string>();
            List<int> portNum = new List<int>();
            //搜索设备管理器中所有的条目
            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(")"))
                        {
                            string sName = name.Substring(0, name.IndexOf("COM") - 1);
                            string port = name.Replace(sName, "");
                            port = port.Substring(port.IndexOf("COM"), port.IndexOf(')') - 1);
                            if (name.Contains("->"))
                            {
                                string[] portPairTemp = port.Split(new string[] { "->" }, StringSplitOptions.None);
                                port = portPairTemp[0] + " -> " + portPairTemp[1];
                            }
                            if (usefullName)
                            {
                                result.Add(port + " " + sName);
                            }
                            else
                            {
                                result.Add(port + " ");
                            }
                            portNum.Add(Convert.ToInt32(result[result.Count - 1].Substring(3, result[result.Count - 1].IndexOf(" ") - 3)));
                        }
                    }
                }
            }
            //port 口升序排序
            if (isSort)
            {
                for (int i = 0; i < result.Count; i++)
                {
                    for (int j = 0; j < result.Count - i - 1; j++)
                    {
                        if (portNum[j] > portNum[j + 1])
                        {
                            int tempPortNum = portNum[j];
                            portNum[j] = portNum[j + 1];
                            portNum[j + 1] = tempPortNum;

                            string resultTemp = result[j];
                            result[j] = result[j + 1];
                            result[j + 1] = resultTemp;
                        }
                    }
                }
            }
            return result.ToArray();
        } 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值