Vorhandene COM Ports ermitteln?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Vorhandene COM Ports ermitteln?

Beitrag von E-P-S »

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.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

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...
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Jap, das hilft mir weiter - recht herzlichen Dank.
Benutzeravatar
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:

Beitrag von HeX0R »

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.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Die Methode gefällt mir auch. Weist du mit Sicherheit bei welchen Betriebssystemen die funktioniert?
Benutzeravatar
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

Beitrag von ts-soft »

E-P-S hat geschrieben:Die Methode gefällt mir auch. Weist du mit Sicherheit bei welchen Betriebssystemen die funktioniert?
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.
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.
Bild
Benutzeravatar
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:

Beitrag von HeX0R »

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.
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.

Es sollte ab Win9x funktionieren.
Benutzeravatar
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

Beitrag von ts-soft »

HeX0R 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.
Ohne Adminrechte wird das Programm bei mir sofort beendet. Nur wenn ich
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.
Bild
Benutzeravatar
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:

Beitrag von HeX0R »

Du bist zu schnell, ich wollte gerade mein falsches Gelaber da oben revidieren ;)

ts-soft hat mal wieder Recht.
Benutzeravatar
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

Beitrag von ts-soft »

HeX0R hat geschrieben:Du bist zu schnell, ich wollte gerade mein falsches Gelaber da oben revidieren ;)

ts-soft hat mal wieder Recht.
Hab gerade mal getestet, lesen geht ohne Admin-Rechte, Du hast Recht
aber: mit Deinem Snippet gehts nicht ohne :freak:
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.
Bild
Antworten