Vorhandene COM-Schnittstellen ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Re: Vorhandene COM-Schnittstellen ermitteln

Beitrag von HeX0R »

Ich könnte wetten, ich habe das hier schon mal irgendwo so ähnlich gepostet, aber ich finde nix mehr.

Egal:

Code: Alles auswählen

Global NewList AvailableComs()

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)

		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 "COM" + Str(AvailableComs())
Next
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Vorhandene COM-Schnittstellen ermitteln

Beitrag von Kiffi »

hier die WMI-Variante:

Code: Alles auswählen

; dieses Beispiel benötigt COMatePLUS von srod:
; http://www.purecoder.net/comate.htm

IncludePath #PB_Compiler_Home + "srod\COMatePLUS\" ; Pfad anpassen!
XIncludeFile "COMatePLUS.pbi" 

Define objWMIService.COMateObject
Define colItems.COMateEnumObject 
Define objItem.COMateObject
Define strComputer.s

strComputer = "." 

objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "") 
If objWMIService 
  colItems = objWMIService\CreateEnumeration("ExecQuery('Select * FROM Win32_SerialPort')") 
  If colItems
    objItem = colItems\GetNextObject() 
    While objItem
      
      Debug objItem\GetStringProperty("DeviceID")
      
      objItem\Release() 
      objItem = colItems\GetNextObject() 
    Wend 
    colItems\Release() 
  EndIf 
  objWMIService\Release()  
EndIf
Grüße ... Kiffi
a²+b²=mc²
Hein
Beiträge: 2
Registriert: 15.11.2009 10:40

Re: Vorhandene COM-Schnittstellen ermitteln

Beitrag von Hein »

@Crawler

Diese Methode habe ich schon probiert aber genau diese wollte ich eigentlich vermeiden.
Sie liefert mir nur die "freien" Ports.





@Kiffi

Danke, werde ich probieren.
Muß mir noch comateplus besorgen.
Geht doch mit der Demo oder ?



@Hexor

Ja die Reg abzufragen war auch einer meiner ersten Ideen und gefällt mir am besten aber geht leider in der Demo nicht.





@All

Erstmal danke für die Anregungen

Ich überlege mir eh ob ich mir Purebasic zulege.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Vorhandene COM-Schnittstellen ermitteln

Beitrag von Kiffi »

Hein hat geschrieben:Muß mir noch comateplus besorgen.
Geht doch mit der Demo oder ?
nee, mit der Demo funktioniert das nicht.
Hein hat geschrieben:Ich überlege mir eh ob ich mir Purebasic zulege.
mach das! Bis dahin bitte in Deine Signatur eintragen,
dass Du nur die Demo hast.

Grüße ... Kiffi
a²+b²=mc²
Antworten