Vorhandene COM Ports ermitteln?
Vorhandene COM Ports ermitteln?
Hallo zusammen. Ich habe ein kniffliges Problem.
Ich möchte gerne alle vorhandenen COM Ports ( physisch und virtuell ) ermitteln.
An sich würde man einfach versuchen den Port zu öffnen und "mitschreiben" wo dies machbar ist und wo nicht. Entweder per API (CreateFile) oder per Lib ComOpen etc.
Das Problem: Wenn meine COM1 z.B. gerade von einem anderen Programm benutzt wird, dann bekomme ich beim Versuch sie zu öffnen einen Fehler und sie würde als "nicht vorhanden" eingestuft. Sie ist aber natürlich vorhanden - nur eben gerade nicht verfügbar.
Wie kann man denn noch die vorhandenen COM Ports ermitteln so das es von Windows 98 - Vista funktioniert?
Vielen Dank schonmal.
Ich möchte gerne alle vorhandenen COM Ports ( physisch und virtuell ) ermitteln.
An sich würde man einfach versuchen den Port zu öffnen und "mitschreiben" wo dies machbar ist und wo nicht. Entweder per API (CreateFile) oder per Lib ComOpen etc.
Das Problem: Wenn meine COM1 z.B. gerade von einem anderen Programm benutzt wird, dann bekomme ich beim Versuch sie zu öffnen einen Fehler und sie würde als "nicht vorhanden" eingestuft. Sie ist aber natürlich vorhanden - nur eben gerade nicht verfügbar.
Wie kann man denn noch die vorhandenen COM Ports ermitteln so das es von Windows 98 - Vista funktioniert?
Vielen Dank schonmal.
Hast Du schon probiert, ob sich der folgende Beispiel-Code aus dem englischen Forum von ABBKlaus für Deine Zwecke eignet?
http://www.purebasic.fr/english/viewtop ... 93&start=1
Bei mir läuft er unter WinXP SP2 problemlos. Laut VBArchiv (http://www.vbarchiv.net/api/api_enumports.html) läuft die von ABBKLaus verwendete Funtion EnumPorts() auch unter Win95, Win98, WinME, WinNT 3.1 und Win2000...
http://www.purebasic.fr/english/viewtop ... 93&start=1
Bei mir läuft er unter WinXP SP2 problemlos. Laut VBArchiv (http://www.vbarchiv.net/api/api_enumports.html) läuft die von ABBKLaus verwendete Funtion EnumPorts() auch unter Win95, Win98, WinME, WinNT 3.1 und Win2000...
- HeX0R
- Beiträge: 3055
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Ich mache das immer so:
Code: Alles auswählen
;Get Available Com-Ports
Global NewList AvailableComs.l()
Procedure GetAvailableComPorts()
Protected hKey, lpcbName, lpName.s, a$, lType, i
If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", 0, #KEY_QUERY_VALUE , @hKey) = #ERROR_SUCCESS
lpName = Space(255)
ClearList(AvailableComs())
Repeat
lpcbName = 255
If RegEnumValue_(hKey, i, @lpName, @lpcbName, 0, 0, 0, 0) = #ERROR_SUCCESS
a$ = Left(lpName, lpcbName)
If a$ = ""
Break
EndIf
lpcbName = 255
lType = 0
If RegQueryValueEx_(hKey, a$, 0, @lType, @lpName, @lpcbName) = #ERROR_SUCCESS
a$ = Left(lpName, lpcbName - 1)
If LCase(Left(a$, 3)) = "com"
AddElement(AvailableComs())
AvailableComs() = Val(RemoveString(a$, "COM", 1))
EndIf
EndIf
i + 1
Else
Break
EndIf
ForEver
RegCloseKey_(hKey)
EndIf
EndProcedure
GetAvailableComPorts()
ForEach AvailableComs()
Debug AvailableComs()
Next
Zuletzt geändert von HeX0R am 26.01.2009 20:59, insgesamt 1-mal geändert.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Funktioniert zumindest unter XP und Vista (auch x64), erfordert aberE-P-S hat geschrieben:Die Methode gefällt mir auch. Weist du mit Sicherheit bei welchen Betriebssystemen die funktioniert?
Admin-Rechte (unter XP meist vorhanden, unter Vista per default nicht)
Noch ältere Versionen kann ich leider nicht testen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- HeX0R
- Beiträge: 3055
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Ich kann das hier (Vista/User) nicht bestätigen (habs jetzt extra mal ausprobiert), hätte mich auch gewundert, die Keys werden ja nur ausgelesen.ts-soft hat geschrieben: Funktioniert zumindest unter XP und Vista (auch x64), erfordert aber
Admin-Rechte (unter XP meist vorhanden, unter Vista per default nicht)
Noch ältere Versionen kann ich leider nicht testen.
Es sollte ab Win9x funktionieren.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ohne Adminrechte wird das Programm bei mir sofort beendet. Nur wenn ichHeX0R hat geschrieben: Ich kann das hier (Vista/User) nicht bestätigen (habs jetzt extra mal ausprobiert), hätte mich auch gewundert, die Keys werden ja nur ausgelesen.
Adminrechte anfordere debugt er mir 1 (habe nur einen COM-Port)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- HeX0R
- Beiträge: 3055
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Du bist zu schnell, ich wollte gerade mein falsches Gelaber da oben revidieren 
ts-soft hat mal wieder Recht.
ts-soft hat mal wieder Recht.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Hab gerade mal getestet, lesen geht ohne Admin-Rechte, Du hast RechtHeX0R hat geschrieben:Du bist zu schnell, ich wollte gerade mein falsches Gelaber da oben revidieren
ts-soft hat mal wieder Recht.
aber: mit Deinem Snippet gehts nicht ohne
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
