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

时间:2011-05-18 14:23:11

标签: c# port

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

我知道我们可以使用

获取所有端口名称
System.IO.Ports.SerialPort.GetPortNames()

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

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

那么我如何获得端口名称,是否有任何InBuilt功能。 ?

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

如果您需要获取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)); 

答案 2 :(得分:-3)

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

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