如何在 c# 中获取端口名称

本文关键字:获取 | 更新日期: 2023-09-27 17:56:55

如何在 c# 中获取端口名?

我知道我们可以通过以下方式获取所有端口名称

System.IO.Ports.SerialPort.GetPortNames()

方法。但此方法返回所有端口名称以及所有虚拟 COM 端口名称。

例如,我的一台电脑没有任何COM端口,但它有四个USB端口。因此,现在该函数将端口计数返回为 4。但所有端口都是虚拟 COM 端口。

那么我如何获取端口名称,是否有任何内置函数。

如何在 c# 中获取端口名称

虚拟COM端口旨在模拟真实的COM端口,据我所知,没有标准方法可以检测它是虚拟COM端口。

如果安装应用程序的 PC 都具有相同的虚拟端口,则可以通过查看虚拟 COM 端口的驱动程序文档来执行非标准操作。

如果你能保证所有名称都包含"虚拟"一词,你可以这样做:

System.IO.Ports.SerialPort.GetPortNames().Where( x => !x.Contains("Virtual")).Count();

如果需要获取 C# 中的所有可用端口,可以使用此代码。它将端口放在组合框中。

// Get the valid COM ports and insert them into the portCombo.
Array ports = System.IO.Ports.SerialPort.GetPortNames();
for(int x=0; x< ports.Length;
   portCombo.Items.Add( ports.GetValue(x)); 

如果您的意思是要读出连接设备的名称,则需要通过注册表进行操作。如果您需要更多详细信息,请告诉我。

import _winreg as winreg
import itertools
def enumerate_serial_ports():
    """ Uses the Win32 registry to return an
        iterator of serial (COM) ports
        existing on this computer.
    """
    path = 'HARDWARE''DEVICEMAP''SERIALCOMM'
    try:
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
    except WindowsError:
        raise IterationError
    for i in itertools.count():
        try:
            val = winreg.EnumValue(key, i)
            yield str(val[1])
        except EnvironmentError:
            break