如何在 c# 中获取端口名称
本文关键字:获取 | 更新日期: 2023-09-27 17:56:55
如何在 c# 中获取端口名?
我知道我们可以通过以下方式获取所有端口名称
System.IO.Ports.SerialPort.GetPortNames()
方法。但此方法返回所有端口名称以及所有虚拟 COM 端口名称。
例如,我的一台电脑没有任何COM端口,但它有四个USB端口。因此,现在该函数将端口计数返回为 4。但所有端口都是虚拟 COM 端口。
那么我如何获取端口名称,是否有任何内置函数。
虚拟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