Liste von COM Ports



  • Hallo,

    ich würde gern einmal wissen, wie ich an die derzeit im System installierten COM-Ports rankomme.
    Diese will ich dann dem Nutzer zur Auswahl geben.

    Leider macht:

    void GetSerialPortsList(LPSTR szSymbol);
    

    nicht gerade das, was der Name vermuten lässt.

    Ich hoffe ihr kennt eine Antwort.
    Aso wäre schön wenn das dann unter w2k/XP funktionieren würde.

    mfg Saxony007





  • Hallo,

    vielen Dank. Hat mir geholfen.
    Anstatt wie ich es versucht habe mit:

    BOOL GetDefaultCommConfig(
    
        LPCSTR lpszName,	
        LPCOMMCONFIG lpCC,	
        LPDWORD lpdwSize	
       );
    

    Hab ich es nun mit:

    HANDLE CreateFile(LPCTSTR lpszName, DWORD fdwAccess, DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile)
    

    gemacht.

    Hier der Source für Interessierte:

    COMMCONFIG comcfg;
        unsigned long sizecc = sizeof(COMMCONFIG);
        char szPort[15];
        for(int i = 0; i < 256; i++) {
    
            // port format \\.\COMx
            wsprintf(szPort, "\\\\.\\COM%d", i);
    
            HANDLE hPort = ::CreateFile(szPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
            if (hPort == INVALID_HANDLE_VALUE) {
    
                DWORD error = GetLastError();
                // port already open etc.            
                if (error== ERROR_ACCESS_DENIED || error== ERROR_GEN_FAILURE || error== ERROR_SHARING_VIOLATION) {
    
                    TestReport->Lines->Append(szPort);
                }
            } else {
    
                TestReport->Lines->Append(szPort);
                CloseHandle(hPort);
            }
        }
    

    mfg Saxony



  • Damit findest Du aber keine, die schon offen sind... Nauhgter hat deswegen min. drei Varianten...



  • Hallo,

    also mit der oben beschriebenen Variante bekomme ich auch schon offene Ports mit in die Ergebnismenge.
    Siehe Auswertung GetLastError() bei if (hPort == INVALID_HANDLE_VALUE) {...}

    mfg Saxony


Anmelden zum Antworten