nja musst halt über timer das ganze lösen.
ausserdem würde ich immer noch eine abfragen einbauen ob du gerade im gui bist. denn du willst sicher nicht das dein gui mit den keys bespammt wird.
auch die if abfragen fürs gui sind extrem ineffizient.
hier mal an deinem beispielgui wie man es richtig machen würde:
Code:
Global $on=0, $on_t1, $on_t2, $on_t3
$gui = GuiCreate("BoT",268,487,411,130)
$button1=GuiCtrlCreateButton("Start",37,26,27,11)
$button4=GuiCtrlCreateButton("StopAlles",36,392,93 ,68)
$button5=GuiCtrlCreateButton("Exit",144,393,101,68 )
$button2=GuiCtrlCreateButton("Start2",36,113,70,25 )
$button3=GuiCtrlCreateButton("Start3",36,192,74,25 )
$input1=GuiCtrlCreateInput("50",35,66,70,20)
$input2=GuiCtrlCreateInput("50",34,151,74,20)
$input3=GuiCtrlCreateInput("50",33,230,77,20)
$label1=GuiCtrlCreateLabel("Pick Up",172,29,10,15)
$label2=GuiCtrlCreateLabel("Zeit in ms (1000ms = 1sek )",118,67,145,15)
$label3=GuiCtrlCreateLabel("PottRot",155,118,64,15)
$label4=GuiCtrlCreateLabel("Zeit in ms",146,154,7,15)
$label5=GuiCtrlCreateLabel("PottBlau",150,199,7,15 )
$label6=GuiCtrlCreateLabel("zeit in ms",147,232,62,15)
GuiSetState()
While 1
Switch GuiGetMsg()
Case -3
Exit
Case $button1
$on = 1
Case $button2
$on = 2
Case $button3
$on = 3
Case $button4
$on = 0
Case $button5
Exit
Case Else
Switch $on
Case 1
on1()
Case 2
on2()
Case 3
on3()
EndSwitch
EndSwitch
WEnd
Func on1()
If TimerDiff($on_t1) > GUICtrlRead($input1) And Not WinActive($gui) Then
Send("y")
$on_t1 = TimerInit()
EndIf
EndFunc
Func on2()
If TimerDiff($on_t2) > GUICtrlRead($input2) And Not WinActive($gui) Then
Send("{F1}")
$on_t2 = TimerInit()
EndIf
EndFunc
Func on3()
If TimerDiff($on_t3) > GUICtrlRead($input3) And Not WinActive($gui) Then
Send("{F2}")
$on_t3 = TimerInit()
EndIf
EndFunc
wenn du dich fragst warum if abfragen ineffizient sind, denk mal drüber nach was passiert wenn die if abfrage erfüllt wurde. in deinem code würden trotzdem noch alle anderen möglichkeiten durchlaufen werden.
man könnte es auch über elseif lösen, dann würde auch beim ersten treffer die abfrage abgebrochen werden. jedoch wird das ganze dann schnell unübersichtlich und switch ist deshalb immer zu bevorzugen.
Edit:
wenn du das ganze auf ein fenster beschränken willst, kannst du mit controlsend arbeiten, oder auf die postmessage funktion aus dem winapis zurückgreifen, wenn dir controlsend zu primitiv ist =)