Vorhandene COM-Schnittstellen ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Hein
Beiträge: 2
Registriert: 15.11.2009 10:40

Vorhandene COM-Schnittstellen ermitteln

Beitrag von Hein »

Hallo


Ich möchte über eine Auswahl nur die im System tatsächlich vorhandenen seriellen Schnittstellen anbieten.
Bis jetzt habe ich mit Serialportid, isserialport usw. experimentiert aber komme da nicht wirklich weiter.

Hat jemand eine Ahnung wie ich die vorhandenen Ports ermitteln kann ohne sie erst aktivieren zu müssen ?


Danke
Crawler
Beiträge: 110
Registriert: 08.02.2009 19:52
Computerausstattung: PB 4.41
Win7 64bit

Re: Vorhandene COM-Schnittstellen ermitteln

Beitrag von Crawler »

In solch einem Fall versuche ich die Schnittstelle zu öffnen:

Code: Alles auswählen

For i=1 To 20 
  If OpenSerialPort (0, "COM"+Str(i), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
    Debug "COM "+Str(i)+" ok"
    CloseSerialPort (0)
  Else
    Debug "COM "+Str(i)+" not found"  
  EndIf
Next    
Ist vielleicht nicht die schönste, aber durchaus eine brauchbare Lösung.
PB 4.41 | Win7 64bit
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