Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » System

Serielle Schnittstellen (COM-Ports) unter Windows ermitteln

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.RedakteurSt_W 09.04.2012

Unter Windows sind alle verfügbaren Seriellen Schnittstellen (COM-Ports) in der Registrierungsdatenbank unter dem Schlüssel "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM" abgebildet. Dieser Registierungsschlüssel lässt sich auch ohne Administratorrechten auslesen und ist somit bestens dafür geeignet, die COM-Ports zu ermitteln.

SERIALCOMM-Registrierungsschlüssel

Dazu wird der Schlüssel zuerst mittels Externer Link!RegOpenKeyEx geöffnet. Mittels Externer Link!RegQueryInfoKey kann die Anzahl der vorhanden Einträge sowie die maximale Länge des Schlüsselnamens (in Zeichen) und des Schlüsselwertes(in Bytes) ermittelt werden. Mit diesen Informationen kann mittels Externer Link!RegEnumValue über die einzelnen Einträge iteriert werden. Der Schlüsselname bezeichnet das Gerät, das den Port zur Verfügung stellt. Der Schlüsselwert bezeichnet den COM-Port selbst. Nachdem der Schlüssel ausgelesen wurde, muss dieser mittels Externer Link!RegCloseKey geschlossen werden.

'Vorhandene COM-Ports unter Windows ermitteln
'---
'Autor: Stefan Wurzinger am 09.04.2012
'Getestet mit FreeBASIC 0.23.0 unter Windows 7 (64-Bit)

#Include "windows.bi"

Dim hKey As HANDLE
Dim status As Integer

'Schlüssel öffnen; Fehlermeldung ausgeben und Programm beenden falls nicht erfolgreich
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, @"HARDWARE\DEVICEMAP\SERIALCOMM", 0, KEY_QUERY_VALUE, @hKey)
If status <> ERROR_SUCCESS Then
    Print "Fehler beim Öffnen des Registry Keys (Error"; status; ")"
    Sleep
    End
EndIf

Dim comCnt As Integer                       'Anzahl der COM-Ports
Dim As String comStr, comPort               'Gerätename und COM-Port
Dim As Integer comStrLen, comPortLen        'Länge in Zeichen resp. Bytes
Dim As Integer comStrMaxLen, comPortMaxLen  'Maximale Länge in Zeichen resp. Bytes

'Größeninformationen des Schlüssels abfragen
RegQueryInfoKey(hKey, 0, 0, 0, 0, 0, 0, @comCnt, @comStrMaxLen, @comPortMaxLen, 0, 0)
comStr = String(comStrMaxLen, 0)
comPort = String(comPortMaxLen, 0)

For q As Integer = 0 To comCnt-1
    comStrLen = comStrMaxLen+1          'Abschließendes NULL-Zeichen
    comPortLen = comPortMaxLen/2        'ANSI anstatt UNICODE
    'Schlüsselname und -wert ermitteln und ausgeben; Fehlermeldung ausgeben wenn nicht erfolgreich
    status = RegEnumValue(hKey, q, StrPtr(comStr), @comStrLen,0 , 0, StrPtr(comPort), @comPortLen)
    If status = ERROR_SUCCESS Then
        Print Left(comPort, comPortLen) + Chr(9) + Left(comStr, comStrLen)
    Else
        Print "Fehler beim Auslesen des Registry Keys (Error"; status; " bei Index"; q; ")"
    EndIf
Next
'Schlüssel schließen
RegCloseKey(hKey)

Print
Print comCnt; " COM-Ports vorhanden"

Sleep

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 09.04.2012 von RedakteurSt_W angelegt.
  • Die aktuellste Version wurde am 09.04.2012 von RedakteurSt_W gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen