C#-使用WMI获取带有友好名称的COM端口

时间:2019-01-24 10:48:01

标签: c# wmi

我正在开发C#解决方案,我想获取COM端口,描述和friendlyName(如果它们是蓝牙的话)。

经过一番调查,我发现可以通过搜索名称描述来使用 WMI / CIMV2 / Win32_PnPEntity 获取COM端口。 strong>值。

要查找友好名称,我需要在 Win32_PnPSignedDriver 上进行搜索,并使用 FriendlyName

的值

有没有办法匹配他们以获得这样的列表?

  • COM56-蓝牙设备-MyBTHDeviceName1
  • COM76-蓝牙设备-MyBTHDeviceName2
  • COM5-串行设备-

我附上我现在拥有的代码以获取前两个字段。

// Method to retrieve the list of all COM ports.
        public static List<PortInfo> FindComPorts()
        {
            List<PortInfo> portList = new List<PortInfo>();
            ConnectionOptions options = PrepareOptions();
            ManagementScope scope = PrepareScope(Environment.MachineName, options, @"\root\CIMV2");

            // Prepare the query and searcher objects.
            ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode = 0");
            ManagementObjectSearcher portSearcher = new ManagementObjectSearcher(scope, objectQuery);

            using (portSearcher)
            {
                string caption = null;
                // Invoke the searcher and search through each management object for a COM port.
                foreach (ManagementObject currentObject in portSearcher.Get())
                {
                    if (currentObject != null)
                    {
                        object currentObjectCaption = currentObject["Caption"];
                        if (currentObjectCaption != null)
                        {
                            caption = currentObjectCaption.ToString();
                            if (caption.Contains("(COM"))
                            {
                                PortInfo portInfo = new PortInfo();
                                portInfo.Name = caption.Substring(caption.LastIndexOf("(COM")).Replace("(", string.Empty).Replace(")", string.Empty);
                                portInfo.Description = caption;
                                portList.Add(portInfo);
                            }
                        }
                    }
                }
            }
            return portList;
        }

多谢。

1 个答案:

答案 0 :(得分:0)

您要查找的“友好名称”仅在COM端口为虚拟端口时才适用(我假设它们在您的示例中)。我认为您可以获取在name类上查找Win32_PnPEntity属性所需的信息。无需在COM端口上搜索其他信息,因为您已经获得了Win32_PnPEntity类上的所有信息。

您也可以尝试使用ORMi并为此使用强类型对象。