2012-02-21 85 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(); 
} 
相關問題