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
Vorhandene COM-Schnittstellen ermitteln
Re: Vorhandene COM-Schnittstellen ermitteln
In solch einem Fall versuche ich die Schnittstelle zu öffnen:
Ist vielleicht nicht die schönste, aber durchaus eine brauchbare Lösung.
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
PB 4.41 | Win7 64bit
- 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
Ich könnte wetten, ich habe das hier schon mal irgendwo so ähnlich gepostet, aber ich finde nix mehr.
Egal:
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
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: Vorhandene COM-Schnittstellen ermitteln
hier die WMI-Variante:
Grüße ... Kiffi
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
a²+b²=mc²
Re: Vorhandene COM-Schnittstellen ermitteln
@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.
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.
Re: Vorhandene COM-Schnittstellen ermitteln
nee, mit der Demo funktioniert das nicht.Hein hat geschrieben:Muß mir noch comateplus besorgen.
Geht doch mit der Demo oder ?
mach das! Bis dahin bitte in Deine Signatur eintragen,Hein hat geschrieben:Ich überlege mir eh ob ich mir Purebasic zulege.
dass Du nur die Demo hast.
Grüße ... Kiffi
a²+b²=mc²