Auflisten der seriellen Anschlüsse (COM) unter Windows?

Ich suche nach einer zuverlässigen Möglichkeit, die verfügbaren seriellen Anschlüsse (COM) auf einem Windows-Computer aufzulisten. Da ist esDieser Beitrag über die Verwendung von WMI, aber ich möchte etwas weniger .NET-spezifisch - Ich möchte die Liste der Ports in einem Python- oder C ++ - Programm ohne .NET erhalten.

Ich kenne derzeit zwei andere Ansätze:

Lesen Sie die Informationen in derHARDWARE\\DEVICEMAP\\SERIALCOMM Registrierungsschlüssel. Das sieht nach einer großartigen Option aus, ist es aber auchrobust? Ich kann online oder in MSDN keine Garantie finden, dass diese Registrierungszelle tatsächlich immer die vollständige Liste der verfügbaren Ports enthält.

Versuchen Sie nicht anzurufenCreateFile aufCOMN mit N eine Zahl von 1 bis etwas. Dies ist nicht gut genug, da einige COM-Ports nicht den Namen COMN haben. Einige erstellte virtuelle COM-Ports haben beispielsweise den Namen CSNA0, CSNB0 usw., sodass ich mich nicht auf diese Methode verlassen würde.

Gibt es noch andere Methoden / Ideen / Erfahrungen zum Teilen?

Bearbeiten: Übrigens, hier ist eine einfache Python-Implementierung zum Lesen der Portnamen aus der Registrierung:

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

Antworten auf die Frage(8)

Ihre Antwort auf die Frage