在Windows上列出串行(COM)端口?

2024-09-27 07:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种健壮的方法来列出Windows机器上可用的串行(COM)端口。有{a1},但我想少一些.NET特定的-我想得到一个Python或C++程序中的端口列表,而不.NET。

我目前知道另外两种方法:

  1. 正在读取HARDWARE\\DEVICEMAP\\SERIALCOMM注册表项中的信息。这看起来是一个不错的选择,但它是否可靠?我无法在联机或MSDN中找到此注册表单元格确实始终保存可用端口的完整列表的保证。

  2. 试图在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

Tags: 方法端口importcom列表net注册表serial
3条回答

将pySerial与Python一起使用:

import serial.tools.list_ports


ports = list(serial.tools.list_ports.comports())
for p in ports:
    print p

有几种选择:

  1. 使用空lpDeviceName调用QueryDosDevice以列出所有DOS设备。然后依次对每个设备名使用CreateFile和GetCommConfig来确定它是否是串行端口。

  2. 使用GUID设备接口组件的类GUID调用SetupDiGetClassDevs

  3. WMI is also available to C/C++ programs

有一些关于win32 newsgroup和一个代码项目的对话,呃,project

PySerial项目提供了一个couple of solutions

相关问题 更多 >

    热门问题