C#如何获取电脑中的端口号和硬件信息

我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。

那么如果我们使用C#编写软件时候,如何获取到串口的硬件信息呢?

思路就是通过读取设备管理器里的条目来实现,我这里给大家封装好了一个通用的方法。

cs 复制代码
        /// <summary>
        /// 获取可用端口号
        /// </summary>
        /// <param name="usefullName">是否使用完全名称</param>
        /// <returns>端口号集合</returns>
        public static string[] GetPortNames(bool usefullName = false)
        {
            List<string> result = new List<string>();
            try
            {
                //搜索设备管理器中的所有条目
                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
                                {
                                    //获取端口号
                                    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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
                result = new List<string>();
            }
            return result.ToArray();
        }

如果我们需要获取带硬件信息,那么usefullname传入True即可。

cs 复制代码
string[] ports = GetPortNames(true);
foreach (var item in ports)            
{                
   Console.WriteLine(item);            
}

如果我们不需要获取带硬件信息的端口号集合,那么usefullname传入False,默认参数是False,不填的话,就是False。

相关推荐
动感光博10 分钟前
Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
开发语言·人工智能·计算机视觉·unity·c#·游戏引擎
蚰蜒螟1 小时前
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
开发语言·jvm·python
keke101 小时前
Java【14_2】接口(Comparable和Comparator)、内部类
java·开发语言
思茂信息1 小时前
CST软件对OPERA&CST软件联合仿真汽车无线充电站对人体的影响
c语言·开发语言·人工智能·matlab·汽车·软件构建
CN.LG1 小时前
Java 乘号来重复字符串的功能
java·开发语言
川川菜鸟1 小时前
2025长三角数学建模C题完整思路
c语言·开发语言·数学建模
萌新下岸多多关照1 小时前
Java中synchronized 关键字
java·开发语言
醍醐三叶1 小时前
C++文件操作--2 二进制文件操作
开发语言·c++
剽悍一小兔2 小时前
linux,我启动一个springboot项目, 用java -jar xxx.jar & ,但是没多久这个java进程就会自动关掉
开发语言
li星野2 小时前
C++:C++内存管理
开发语言·c++