C#枚举所有串口COM

来源:互联网 发布:睡了兄弟的女朋友知乎 编辑:程序博客网 时间:2024/05/16 08:39

在实际项目中,如需都COM进行操作,往往需要枚举当前电脑中可用的所有串口COM。

我们第一想到的就是SerialPort.GetPortNames()方法。但这种方法有个缺陷那就是不能罗列那些通过USB连接虚拟出来的COM口。


本人在实际工作中的解决方案如下(关键部分)。

//Because Win32_SerialPort can't find the virtual COM ports, use Win32_PnPEntity hereusing (var searcher = new ManagementObjectSearcher(@"root\CIMV2""SELECT * FROM Win32_PnPEntity  WHERE Status='OK'")){    foreach (var queryObj in searcher.Get())    {        ComPortInfo comPortInfo;        if (TryParseComPortInfo(queryObj, out comPortInfo))            _comPortInfoList.Add(comPortInfo);    }}

private static bool TryParseComPortInfo(ManagementBaseObject queryObj, out ComPortInfo comPortInfo){    comPortInfo = null;     var captionPropertyValue = queryObj["Caption"as string;    if (string.IsNullOrWhiteSpace(captionPropertyValue))        return false;     var portNumber = 0;    if (!TryParsePortNumber(captionPropertyValue, out portNumber))        return false;     comPortInfo = new ComPortInfo    {        PortName = PortInfoBase.ToPortName(portNumber),        PortNumber = portNumber,        Description = queryObj["Description"as string,        DeviceId = queryObj["DeviceID"as string,        Manufacturer = queryObj["Manufacturer"as string    };     return true;}

如果你在实际项目也遇到类似的问题,希望都你有所帮助。

原创粉丝点击