Wyświetlanie portów szeregowych (COM) w systemie Windows?

Szukam solidnego sposobu na listę dostępnych portów szeregowych (COM) na komputerze z systemem Windows. Jestten post o używaniu WMI, ale chciałbym coś mniej specyficznego dla .NET - chcę uzyskać listę portów w programie Python lub C ++, bez .NET.

Obecnie znam dwa inne podejścia:

Czytanie informacji wHARDWARE\\DEVICEMAP\\SERIALCOMM klucz rejestru. To wygląda na świetną opcję, ale czy takkrzepki? Nie mogę znaleźć gwarancji online lub w MSDN, że ta komórka rejestru rzeczywiście zawiera pełną listę dostępnych portów.

Tryint zadzwonićCreateFile naCOMN z N liczba od 1 do czegoś. Nie jest to wystarczające, ponieważ niektóre porty COM nie mają nazw COMN. Na przykład niektóre utworzone porty wirtualne COM mają nazwę CSNA0, CSNB0 itd., Więc nie polegałbym na tej metodzie.

Jakieś inne metody / pomysły / doświadczenia do udostępnienia?

Edytować: nawiasem mówiąc, oto prosta implementacja Pythona do odczytu nazw portów z rejestru:

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

questionAnswers(8)

yourAnswerToTheQuestion