Ich bin grad dabei, einen Bot zu schreiben, der mich alle 35sec daran erinnert, dass ich etwas machen soll. Dazu wollte ich gerne eine Progressbar und ein Soundfile (mp3) verwenden.
Die Sounddatei liegt im gleichen Ordner (genauso wie das Bild für das GUI) und wird mit ".\Dateiname" aufgerufen.
Damit man die Zeit bis zum nächsten mal sieht, wollte ich sie gerne in einer Progressbar darstellen.
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btnLosLangsam
GUICtrlSetData($Progress1,0)
setPro()
AdlibRegister("setPro",1000)
EndSwitch
WEnd
Func setPro()
$curValue = GUICtrlRead($Progress1)
if $curValue < 100 Then $curValue += 10
GUICtrlSetData($Progress1, $curValue)
EndFunc
Leider brachte ich nach 2 Stunden herumprobieren und Tutorials anschauen immer noch nicht das gewünschte Ergebniss auf den Bildschirm.
Hier nochmal genau was eigentlich meine Pläne waren:
1.) GUI Fenster mit einem Start-Button und einer Progressbar
1a.) Der Start-Button löst nach ::WinMinimizeAll:: (sleep (1000)) eine MsgBox aus.
1.b) Die Progressbar zeigt eine Zeitspanne von 35sec an.
2.) Mit der HotKeyTaste {#} wird der Timer gestartet, bei erneutem Drücken wird der Timer angehalten und resetet.
Dies müsste mit diesem Code funktionieren:
PHP Code:
$y = 0
Hotkeyset("{#}", 'start')
Func start()
$y = 1
Hotkeyset("{#}", 'pause')
While 1
If $y = 0 Then ExitLoop
sleep (5000)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 start() EndSwitch WEnd
Func start() Local $timer, $end = 0
MsgBox("","","Timer wurde zurück gesetzt") GUICtrlSetData($Progress1, 0)
$timer = TimerInit()
While Not _IsPressed("BF") And Not _IsPressed("1B") For $i = 0 To 100 If TimerDiff($timer) >= 35000/100 Then ;35000 für 35sec GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 1) $timer = TimerInit() EndIf Next If GUICtrlRead($Progress1) >= 100 Then $end = 1 ExitLoop EndIf WEnd
If _IsPressed("1B") Then Exit If _IsPressed("BF") Then start()
If $end = 1 Then ;um mehrmaliges aufrufen zu vermeiden MsgBox("","", "Zeit ist um") ;hier dann der rest, wie zb deien .mp3 EndIf
und so weiter und so fort(bis zu 3mal.) Und wenn die Taste (zb) X gedrückt wird, dann geschieht Y...
Danke an jeden, der sich die geschicht kurz durch den Kopf gehen lässt...
Wenn wer will, kann er auch gerne mein Script durschauen, testen und etwaige Schwachstellen aufdecken!
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_LABEL1
EndSwitch
WEnd
Func start()
Local $timer, $zTimer, $end = 0
GUICtrlSetData($Progress1, 0)
$zeit = 35
$timer = TimerInit()
$zTimer = TimerInit()
While Not _IsPressed("1B")
If _IsPressed("BF") Then ExitLoop
If _IsPressed("58") Then ToolTip("X - Taste wurde gedrückt", 0, 0)
For $i = 0 To 100
If TimerDiff($timer) >= 35000/100 Then
GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 1)
$timer = TimerInit()
EndIf
Next
If GUICtrlRead($Progress1) >= 100 Then
$zae += 1
$end = 1
ExitLoop
EndIf
If TimerDiff($zTimer) >= 1000 Then
$zeit -= 1
GUICtrlSetData($GUI_ANZAHL, $zeit)
$zTimer = TimerInit()
EndIf
WEnd
If $zae > 3 Then
GUICtrlSetState($Pic2, $GUI_HIDE)
GUICtrlSetState($Pic3, $GUI_HIDE)
$zae = 1
EndIf
If $zae = 2 Then GUICtrlSetState($Pic2, $GUI_SHOW)
If $zae = 3 Then GUICtrlSetState($Pic3, $GUI_SHOW)
If _IsPressed("1B") Then Exit
If _IsPressed("BF") Then start()
If $end = 1 Then
MsgBox("","", "Zeit ist um", 1)
start()
EndIf
Da mit den Timern muss ich dir tatsächlich recht geben. Diese Lösung ist um einiges eleganter als sleep(100) ;D
Das Problem ist, dass ich halt noch nie mit Timern gearbeitet habe( bin aber grad dabei) und grad nicht ganz versteh wieso der Timer das Skript total stopt... also nicht ganz genau das, was ich brauche. Wenn der Button X das Skript stoppt, sollte er beim zweiten Mal das Skript resetten und neu starten!
Kann man den eigentlich start() ohne func davor hinschreiben?
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit
Case $GUI_LABEL1 EndSwitch WEnd
Func start() Local $timer, $zTimer, $end = 0
GUICtrlSetData($Progress1, 0) $zeit = 35
$timer = TimerInit() $zTimer = TimerInit() While Not _IsPressed("1B") If _IsPressed("79") Then ExitLoop If _IsPressed("58") Then ToolTip("X - Taste wurde gedrückt", 0, 0) For $i = 0 To 100 If TimerDiff($timer) >= 35000/100 Then GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 1) $timer = TimerInit() EndIf Next If GUICtrlRead($Progress1) >= 100 Then $zae += 1 $end = 1 ExitLoop EndIf If TimerDiff($zTimer) >= 1000 Then $zeit -= 1 GUICtrlSetData($GUI_ANZAHL, $zeit) $zTimer = TimerInit() EndIf WEnd
If $zae > 3 Then GUICtrlSetState($Pic1, $GUI_HIDE) GUICtrlSetState($Pic2, $GUI_HIDE) GUICtrlSetState($Pic3, $GUI_HIDE) $zae = 0 EndIf If $zae = 1 Then GUICtrlSetState($Pic1, $GUI_SHOW) If $zae = 2 Then GUICtrlSetState($Pic2, $GUI_SHOW) If $zae = 3 Then GUICtrlSetState($Pic3, $GUI_SHOW)
If _IsPressed("1B") Then Exit If _IsPressed("79") Then start()
If $end = 1 Then SoundPlay(".\Schwammerl.mp3",1) start() EndIf
ahh seh erst jetz was du meinst...
Wenn man die # - Taste zu lange hält, stoppt es total oder beendet sich manchmal...
habs mal so gelöst:
If _IsPressed("BF") Then
Sleep(1000)
start()
EndIf
Da du in dem Fall den Script eh neustarten möchtest, hab ich eine Sleep von 1 sec eingebaut (um mehrmaliges drücken zu vermeiden) und dadurch müsste es normal funktionieren.