In der PB-Hilfe findet sich ja folgendes Beispiel:
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Port$ = "COM1"
CompilerElse
Port$ = "/dev/ttyS0"
CompilerEndIf
Darauf aufbauend könnte man den nächsten Codeschnipsel anpassen, den ich mir mal zurechtgewurstelt habe:
Enumeration
#MainWindow
#BTN_Quit
#BTN_Connect
#BTN_Disconnect
#Port
#CB_Port
EndEnumeration
ProgramName.s = "TEST"
OpenWindow (#MainWindow, 100, 100, 230, 330, ProgramName.s)
ButtonGadget (#BTN_Quit, 120, 300, 100, 20, "Ende")
ButtonGadget (#BTN_Connect, 120, 230, 100, 20, "Verbinden")
ButtonGadget (#BTN_Disconnect, 120, 255, 100, 20, "Trennen")
DisableGadget (#BTN_Disconnect, 1)
ComboBoxGadget(#CB_Port, 120, 205, 100, 20)
For i = 1 To 20
If OpenSerialPort (#Port, "COM"+Str(i), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 64, 64)
AddGadgetItem(#CB_Port, -1,"COM" + Str(i))
CloseSerialPort (#Port)
EndIf
Next
SetGadgetState (#CB_Port, 0) ; Voreinstellung für seriellen Port
Repeat
Event = WaitWindowEvent (10)
If Event = #PB_Event_CloseWindow
Quit = 1
EndIf
If Event = #PB_Event_Gadget
Select EventGadget()
Case #BTN_Quit
Quit=1
Case #BTN_Connect
If OpenSerialPort (#Port, GetGadgetText (#CB_Port), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 64, 64)
connect = 1
DisableGadget (#BTN_Connect, 1)
DisableGadget (#CB_Port, 1)
DisableGadget (#BTN_Disconnect, 0)
EndIf
Case #BTN_Disconnect
connect = 0
DisableGadget (#BTN_Connect, 0)
DisableGadget (#CB_Port, 0)
DisableGadget (#BTN_Disconnect, 1)
CloseSerialPort (#Port)
EndSelect
EndIf
Until Quit
Habe mal alles unwichtige rausgeschmissen und nur die Basisfunktionalität gelassen. Ich teste einfach beim Programmstart, welche COM-Ports sich überhaupt öfnen lassen und setze für jeden verfügbaren Port ein Element in die ComboBox. Dann schließe ich den Port und habe ne schöne Auswahlliste der verfügbaren Ports.