【问题标题】:GET FRIENDLY PORT NAME Programmatically以编程方式获取友好的端口名称
【发布时间】:2012-03-11 08:49:49
【问题描述】:

这里的任何人都知道我可以在哪里获取我的 PC 中列出的端口名称?

通过使用此代码:

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)。我怎么能那样做?

【问题讨论】:

标签: c# vb.net serial-port


【解决方案1】:

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

在您的应用程序中添加对 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());

    var portList = portnames.Select(n => n + " - " + ports.FirstOrDefault(s => s.Contains(n))).ToList();
    foreach (var i in portList)
    {
        Console.WriteLine(i);
    }
}

【讨论】:

    【解决方案2】:

    试试这个。

    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
    

    应该可以的..

    【讨论】:

      【解决方案3】:

      您可以使用 WMI... 在应用程序中添加对 System.Management 的引用 那么,

      在 StackOverflow 上显示: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);
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-06-18
          • 1970-01-01
          • 2018-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多