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

这里有人知道我可以在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) 。 我怎么能这样做?

试试这个 。

 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 

这应该工作..

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

在应用程序中添加对System.Management的引用

 using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM%'")) { var portnames = SerialPort.GetPortNames(); var ports = searcher.Get().Cast().ToList().Select(p => p["Caption"].ToString()); portList = portnames.Select(n => n + " - " + ports.FirstOrDefault(s => s.Contains(n))).ToList(); } 

你可以使用WMI …在你的应用程序中添加对System.Management的引用,

显示在StackOverflow上: 获取串行端口信息

 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().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); 

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

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