【发布时间】:2010-11-15 09:04:21
【问题描述】:
我正在寻找一种可靠的方法来列出 Windows 机器上的可用串行 (COM) 端口。有 this post about using WMI,但我想要一些不那么特定于 .NET 的东西 - 我想在没有 .NET 的情况下获取 Python 或 C++ 程序中的端口列表。
我目前知道另外两种方法:
读取
HARDWARE\\DEVICEMAP\\SERIALCOMM注册表项中的信息。这看起来是个不错的选择,但它是否强大?我无法在网上或 MSDN 中找到此注册表单元确实始终包含可用端口的完整列表的保证。尝试在
COMN上调用CreateFile,并使用从1 到某个数字的N。这还不够好,因为某些 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
【问题讨论】:
-
看起来对查找 com 端口非常有用 - 我将尝试使用它来查找 Arduino 端口
标签: python c windows winapi serial-port