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