我正在寻找一种健壮的方法来列出Windows机器上可用的串行(COM)端口。有{a1},但我想少一些.NET特定的-我想得到一个Python或C++程序中的端口列表,而不.NET。
我目前知道另外两种方法:
正在读取HARDWARE\\DEVICEMAP\\SERIALCOMM
注册表项中的信息。这看起来是一个不错的选择,但它是否可靠?我无法在联机或MSDN中找到此注册表单元格确实始终保存可用端口的完整列表的保证。
试图在COMN
上调用CreateFile
,N是从1到某物的数字。这还不够好,因为有些COM端口没有命名为COMN。例如,创建的一些虚拟COM端口名为CSNA0、CSNB0等,因此我不依赖此方法。
还有其他方法/想法/经验可以分享吗?
编辑:顺便说一下,这里有一个从注册表读取端口名的简单Python实现:
import _winreg as winreg
import itertools
def enumerate_serial_ports():
""" Uses the Win32 registry to return a 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]), str(val[0]))
except EnvironmentError:
break
将pySerial与Python一起使用:
有几种选择:
使用空lpDeviceName调用QueryDosDevice以列出所有DOS设备。然后依次对每个设备名使用CreateFile和GetCommConfig来确定它是否是串行端口。
使用GUID设备接口组件的类GUID调用SetupDiGetClassDevs。
WMI is also available to C/C++ programs。
有一些关于win32 newsgroup和一个代码项目的对话,呃,project。
PySerial项目提供了一个couple of solutions。
相关问题 更多 >
编程相关推荐