2012-02-21 88 views
4

任何人在这里有一个想法,我可以在我的电脑中列出端口名称?以编程方式获取友好端口名称

List of ports provided by Device Manager

通过使用此代码:

For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1 
    cmbPort.Properties.Items.Add(My.Computer.Ports.SerialPortNames(i)) 
Next 

我能得到COM26等。如果有的话,但是这不是我想要的。我不想检索COM26,而是想要USB-SERIAL CH340USB-SERIAL CH340 (COM26)。我怎么能这样做?

+0

相关问题与答案:http://stackoverflow.com/questions/2937585/how-to-open-a-serial-port-通过友好名称 – 2012-02-21 01:28:52

+1

这一个可能更相关:[我如何获得Windows中的COM端口的友好名称?](http://stackoverflow.com/questions/304986/how-do-i-get-友好名称的一个COM端口在Windows中) – 2012-02-21 01:35:47

回答

6

试试这个。

Public Shared Function ListFriendlyCOMPOrt() As List(Of String) 

    Dim oList As New List(Of String) 

    Try 
     Using searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM26%'") 
      For Each queryObj As ManagementObject In searcher.Get() 
       oList.Add(CStr(queryObj("Caption"))) 
      Next 
     End Using 

     Return oList 

    Catch err As ManagementException 
     MessageBox.Show("An error occurred while querying for WMI data: " & err.Message) 
    End Try 

    Return oList 

End Function 

这应该工作..

+0

太棒了!谢谢.. – 2012-02-21 03:02:12

0

这不是串口的名称;它是COM26。设备管理器中列出的名称可能是提供仿真的设备的名称。

你为什么要这个名字?如果您更全面地描述您的问题,找出解决方案将会更容易。

2

你可以使用WMI ... 添加引用System.Management在您的应用程序 然后,

在计算器上显示:Getting Serial Port Information

using System.Management; 
using System.IO; 

     string result = ""; 
     using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_SerialPort")) 
     { 
      string[] portnames = SerialPort.GetPortNames(); 
      var ports = searcher.Get().Cast<ManagementBaseObject>().ToList(); 
      var tList = (from n in portnames join p in ports on n equals p["DeviceID"].ToString() select n + " - " + p["Caption"]).ToList(); 

      foreach (string s in tList) 
      { 
       result = result + s; 
      } 
     } 
     MessageBox.Show(result); 
8

我从其他答案中得到了不同的结果。 我想出了这个代码对我更好。

使用WMI System.Management添加引用您的应用程序

using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM%'")) 
{ 
    var portnames = SerialPort.GetPortNames(); 
    var ports = searcher.Get().Cast<ManagementBaseObject>().ToList().Select(p => p["Caption"].ToString()); 

    portList = portnames.Select(n => n + " - " + ports.FirstOrDefault(s => s.Contains(n))).ToList(); 
} 
相关问题