Verfügbare serielle Ports anzeigen

17/09/2008 - 10:06 von Walter Planalp | Report spam
Hallo
Ich suche eine API um die verfügbaren seriellen Ports anzuzeigen.
Mit der API EnumPorts erhalte ich alle Ports, auch solche die gar
nicht hardware màssig ausgerüstet sind.
Ich möchte in meiner Portauswahl nur die verfügbaren seriellen
Schnittstellen anzeigen.

Besten Dank für Hinweise
Walter
 

Lesen sie die antworten

#1 Wolfgang Bußmann
18/09/2008 - 07:00 | Warnen spam
Hallo Walter,

ich habe/hatte teilweise das gleiche Problem und bin dabei mal auf
folgenden Text in einer Newsgroup gestossen. Vielleicht hilft es auch dir.

*******************************

Hi Falko,

Grundsàtzliches: Auf einem "Standard"-Win System können COM-Ports von
COM1 bis COM256 existieren. (lassen wir mal die exotischen
Treiberlösungen mit COM-Ports bis zu COM4096 außen vor ;-)
Kennst Du "EnumSerialPorts" von Naughter? Ist zwar in C geschrieben,
aber es geht ja nur darum, welche Möglichkeiten/Funktionen Du hast um
die verfügbaren seriellen Ports zu ermitteln.

http://www.naughter.com/enumser.html
http://www.naughter.com/download/enumser.zip

Sage und schreibe 7 verschiedene Möglichkeiten listet dieses
Beispielprogramm auf.

Aus meiner Erfahrung sind die folgenden zuverlàssig:
Methode 1: CreateFile()
Methode 2: QueryDosDevice()

Prinzip der Methode 1: Eine Schleife in der nacheinander COM1 bis COM256
geöffnet werden und die jeweiligen Rückgabewerte UND(!)
GetLastError-Werte ausgewertet werden.
Vorteil: Diese Methode ist bei der Porterkennung sehr zuverlàssig (von
Win95 bis WinVista/Server2008).
Nachteil: Mit jedem Öffnen eines tatsàchlich vorhandenen COM-Ports
werden kurz die Leitungen umgeschaltet. Dies kann evtl. störend sein, je
nachdem welche Geràte am RS232-Port angeschlossen sind, z.B. Modems oder
auch interne virtuelle Geràte.

Prinzip der Methode 2: Im Buffer nach den Strings "COMxxx" suchen.
Vorteile: Diese Methode ist bei der Porterkennung zuverlàssig (von WinNT
bis WinVista/Server2008). Und wesentlich schneller als mit der
CreateFile-Methode!
Nachteile: Funktioniert nicht mit Win95/98/Me! Und wenn z.B. ein
USB-RS232-Konverter im aktiven Betrieb (also geöffnetem Port!) abgezogen
wird, dann verbleibt diese COM-Port-Nummer in der Liste, obwohl der
Konverter schon làngst abgezogen ist!

Am besten, lade das Beispielprogramm herunter und guck Dir die
Ergebnisse der unterschiedlichen Methoden an.

Die anderen Methoden in Kurzform:
Methode 3 GetDefaultCommConfig: Scheint àhnlich zuverlàssig zu sein wie
Methode 1. Diese verwende ich nicht, da ich mit den ersten beiden
Methoden sehr zufrieden bin.
Methode 4 SetupAPI (1): Erkennt keine COM-Ports von eingien internen
Modems (ist seltener als mit der nàchsten Methode 5)
Methode 5 SetupAPI (2): Erkennt keine COM-Ports von internen Modems
(z.B. Laptops) oder USB-Modems.
Methode 6 EnumPorts: Zeigt grundsàtzlich alle Ports an, die jemals
verwendet wurden (!) also auch nach einem Rechner-Neustart. Z.B. wenn Du
mal einen USB- oder PCMCIA-Port mal verwendet hast.
Methode 7 WMI: zeigt z.B. USB-RS232-Konverter gar nicht an (funktioniert
aber mit PCMCIA-Adaptern!)

Bei Fragen, hau einfach in die Tasten ;-)
Martin

*******************************************

Wie du siehst, ist das ganze nicht ganz so einfach!

Gruß Wolfgang

Ähnliche fragen