Список последовательных (COM) портов в Windows?

Я ищу надежный способ составления списка доступных последовательных (COM) портов на компьютере с Windows. Там & APOS; sэтот пост об использовании WMI, но я хотел бы что-то менее специфичное .NET - я хочу получить список портов в программе на Python или C ++, без .NET.

В настоящее время я знаю о двух других подходах:

Reading the information in the HARDWARE\\DEVICEMAP\\SERIALCOMM registry key. This looks like a great option, but is it robust? I can't find a guarantee online or in MSDN that this registry cell indeed always holds the full list of available ports.

Tryint to call CreateFile on COMN with N a number from 1 to something. This isn't good enough, because some COM ports aren't named COMN. For example, some virtual COM ports created are named CSNA0, CSNB0, and so on, so I wouldn't rely on this method.

Любые другие методы / идеи / опыт, чтобы поделиться?

Edit: Кстати, вот простая реализация 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

Ответы на вопрос(8)

Ваш ответ на вопрос