C#获取串口的串口号/名称/描述/制造商

发布于 2014-08-10  4889 次阅读


选择串口

越来越多的人用 C#做上位机,但是大多数人上位机串口选择中只能选到串口号,无法看到描述(也就是设备管理器中看到的名称),下面跟着天书一起让自己的上位机高大上起来!

相信很多人在搜索资料的时候看到了调用 setupapi.dll 来获取,.NET 很多功能就是封装的 API 函数,再在程序里整个 API 函数岂不成 C 艹了,让我们用点高端的 WMI!

首先在头部加上引用(如果提示没有的话,先在解决方案资源管理器→项目名→引用中勾选)

using System.Management;

习惯性的做个类:

/// <summary>
/// 天书串口类型
/// </summary>
public class TSSerialPort
{
    /// <summary>
    /// 串口号
    /// </summary>
    public string Name { get; protected set; }
    /// <summary>
    /// 描述
    /// </summary>
    public string Des { get; protected set; }
    /// <summary>
    /// 制造商
    /// </summary>
    public string Manu { get; protected set; }

    public override string ToString()
    {
        return Name + " - " + Des;
    }

    /// <summary>
    /// 获取串口们
    /// </summary>
    /// <returns> 天书串口类型</returns>
    public static List<TSSerialPort> GetPorts()
    {
        List<TSSerialPort> back = new List<TSSerialPort>();

        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity")) //调用 WMI,获取 Win32_PnPEntity,即所有设备
        {
            var hardInfos = searcher.Get();
            foreach (var hardInfo in hardInfos)
            {
                if ((hardInfo.Properties["Name"].Value != null) &&
                    (hardInfo.Properties["Name"].Value.ToString().Contains("COM"))) //筛选出名称中包含 COM 的
                {
                    TSSerialPort temp = new TSSerialPort();
                    string s = hardInfo.Properties["Name"].Value.ToString(); //获取名称
                    int p = s.IndexOf('(');
                    temp.Des = s.Substring(0, p); //截取描述(名称)
                    temp.Name = s.Substring(p + 1, s.Length - p - 2); //截取串口号
                    temp.Manu = hardInfo.Properties["Manufacturer"].Value.ToString(); //获取制造商
                    back.Add(temp);
                }
            }
            searcher.Dispose();
        }

        return back;
    }
}

有关 Win32_PnPEntity 的更多属性,参见 MSDN 官方文档 http://msdn.microsoft.com/en-us/library/aa394353.aspx

功能不够用?查看完整版:TSLib.Port.TSSerialPort


寻找属于自己的1%