以编程方式获得友好的端口名称

Joh*_*Woo 4 c# vb.net serial-port

这里有人知道我可以在PC上找到端口名称吗?

设备管理器提供的端口列表

通过使用此代码:

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

我可以得到COM26等等,但这不是我想要的.而不是检索COM26,我想要USB-SERIAL CH340USB-SERIAL CH340 (COM26).我怎么能这样做?

Gui*_*ino 8

我得到了其他答案的混合结果.我想出了这个代码对我来说更好.

在应用程序中添加对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();
}
Run Code Online (Sandbox Code Playgroud)


Pri*_*Jea 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
Run Code Online (Sandbox Code Playgroud)

这应该工作..