Also hab da ein problem:
ich nöchte, dass wenn ich auf den bei mir "Stop" button drück das script gestoppt wird. wie mach ich das? kann mir wer den code hinschreiben? THX im vorraus
Also hab da ein problem:
ich nöchte, dass wenn ich auf den bei mir "Stop" button drück das script gestoppt wird. wie mach ich das? kann mir wer den code hinschreiben? THX im vorraus
do
sleep(10000) ;pausieren
until ;bis wann?
exit ;script beenden
*hust* *hust* *hust*
Kennst du "www.google.de"
Also wenn ich sogar gegoogelt bekomme dann du auch!
Ich nehme mal an du meinst den Buttom einer selbst erstellten GUI oder?
$hGUI = GUICreate("GUI",350,50,-1,-1)
$hStopButton = GUICtrlCreateButton("Stop",50,15,100,21)
$hWeiterButton = GUICtrlCreateButton("Weiter",200,15,100,21)
GUISetState(1,$hGUI)
While 1
sleep(25)
$msg = GUIGetMsg()
If $msg = -3 Then exit
If $msg = $hStopButton Then
While $msg <> $hWeiterButton
sleep(25)
$msg = GUIGetMsg()
If $msg = -3 Then exit
WEnd
EndIf
ToolTip("Folgt deiner Maus.")
WEnd
Hier eine Lösung für einen Pause Knopf, die IMMER funktioniert.
#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("")
$cButtonGo = GUICtrlCreateButton("Iwas starten", 20, 20, 200, 20)
$MeinExitButton = GUICtrlCreateButton("Pause", 20, 50, 200, 20)
Global $bPaused = False ; <- Das brauchst du
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; <- Das brauchst du
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $cButtonGo
Funktion()
EndSwitch
WEnd
Func Funktion()
Local $x = 10, $t = TimerInit()
ConsoleWrite("start" & @CRLF)
For $i = 1 To 100000000
$x += $i
$x = Mod($x, $i)
If TimerDiff($t) > 100 Then
ConsoleWrite($i & @TAB & $x & @CRLF)
$t = TimerInit()
EndIf
Next
ConsoleWrite("ende" & @CRLF)
EndFunc ;==>Funktion
;~ =======================================
;~ Diese beiden funktionen brauchst du:
Func WM_COMMAND($hWnd, $nMsg, $wParam, $lParam)
Local $hButton = $MeinExitButton ; <- Anpassen!
$hButton = GUICtrlGetHandle($hButton)
If $lParam = $hButton Then
$bPaused = Not $bPaused
AdlibRegister("WM_COMMAND_ADLIB", 10)
EndIf
EndFunc ;==>WM_COMMAND
Func WM_COMMAND_ADLIB()
AdlibUnRegister("WM_COMMAND_ADLIB")
While $bPaused And Sleep(10)
WEnd
EndFunc ;==>WM_COMMAND_ADLIB
;~ =======================================
@xEr0r:
Was funzt den an meinem Script nicht?
dann poste doch dein bisheriges Skript, damit man sehen kann wie du das Beispiel von Zeitriss umgesetzt hast
@xEr0r:
Was funzt den an meinem Script nicht?
Man kann es während das Skript gestoppt ist nicht beenden
@sebuo warum so umständlich So funktionierts doch auch:
$hGUI = GUICreate("GUI",350,50,-1,-1)
$hWeiterButton = GUICtrlCreateButton("Start",50,15,100,21)
$hStopButton = GUICtrlCreateButton("Stop",200,15,100,21)
GUISetState(1,$hGUI)
While 1
$msg = GUIGetMsg()
Switch $msg
case -3
exit
case $hStopButton
AdlibUnRegister("DoIt")
GUICtrlSetData($hWeiterButton,"Weiter")
case $hWeiterButton
AdlibRegister("DoIt",10) ;Zeit anpassen
EndSwitch
WEnd
Func DoIt()
ToolTip("Folgt deiner Maus.")
EndFunc
mfg (Auto)Bert
o warum so umständlich So funktionierts doch auch:
Weil per GUIRegisterMsg die Möglichkeit gegeben ist das Script zu jeder Zeit und aus jeder Schleife heraus zu pausieren. Ganz anders als bei GUIGetMsg().
OnEvent geht zwar in die richtige Richtung, kann aber Aktionen auch nur ausführen, wenn sich das Script in der Hauptschleife befindet. Hängt das Script in einer Schleife innerhalb einer Funktion, dann hilft auch der OnEvent mode nicht wieter.
Deswegen :
ZitatHier eine Lösung für einen Pause Knopf, die IMMER funktioniert.
//EDIT: Ich weiß übrigens auch, dass man bei richtiger benutzung von OnEvent alles in eine Hauptschleife auslagern kann. Nur mal der Vollständigkeit halber.
Deswegen :
Zitat
Hier eine Lösung für einen Pause Knopf, die IMMER funktioniert.
stimmt die Funktion wird sofort pausiert und danach (beim erneten Klick auf Pause) korrekt an der richtigen Stelle fortgeführt , aber selbst im Pause-Zustand kann man das Skript nicht beenden. Ich habe mein Skript auf OnEvent-Mode umgeschrieben. Die eigentliche Funktion wird jetzt in 1000er Blöcken abgearbeitet (lässt sich auch verkleinern nur zur DEMO). Das Skript lässt sich zu jeder Zeit beenden, auch Nachrichten von andere Controls werden sofort abgearbeitet (siehe Button, der eine 2. Gui anzeigt) allerdings wird ein Durchlauf der Schleife immer komplett abgearbeitet, aber wie gesagt man kann die Blöcke ja verkleinern, oder auf eine andere Schleife (in der man den Zähler selbst hochzählt) umstellen.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; *** Start added by AutoIt3Wrapper ***
#include <GUIConstantsEx.au3>
; *** End added by AutoIt3Wrapper ***
Opt('GUIOnEventMode', 1)
Global $hGUI2 = -99, $iStart = 1
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("GUI", 350, 70, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
$hWeiterButton = GUICtrlCreateButton("Start", 50, 15, 100, 21)
GUICtrlSetOnEvent(-1, "Start")
$hStopButton = GUICtrlCreateButton("Stop", 200, 15, 100, 21)
GUICtrlSetOnEvent(-1, "Stop")
$msgButton = GUICtrlCreateButton("2. Gui", 20, 50, 200, 20)
GUICtrlSetOnEvent(-1, "Gui2")
GUISetState(@SW_SHOW, $hGUI)
While 1
Sleep(1000)
WEnd
Func Start()
AdlibRegister("DoIt", 10) ;Zeit anpassen
GUICtrlSetState($hStopButton, $Gui_Enable)
GUICtrlSetState($hWeiterButton, $Gui_Disable)
EndFunc ;==>Start
Func Stop()
AdlibUnRegister("DoIt")
GUICtrlSetData($hWeiterButton, "Weiter")
GUICtrlSetState($hStopButton, $Gui_Disable)
GUICtrlSetState($hWeiterButton, $Gui_Enable)
EndFunc ;==>Stop
Func Gui2()
If $hGUI2 = -99 Then
$hGUI2 = GUICreate("2. GUI", 350, 70, 0, 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "back")
EndIf
GUICtrlCreateButton("&zurück", 20, 50, 200, 20)
GUICtrlSetOnEvent(-1, "back")
GUISetState(@SW_SHOW, $hGUI2)
EndFunc ;==>Gui2
Func back()
GUISetState(@SW_HIDE)
EndFunc ;==>back
Func _exit()
Exit
EndFunc ;==>_exit
Func DoIt()
if $iStart >= 100000000 Then return
Local $x = 10, $t = TimerInit()
For $i = $iStart To $iStart + 999
$x += $i
$x = Mod($x, $i)
WinSetTitle($hGUI, "", "Gui " & $i & " " & $x)
;ConsoleWrite($i & " " & $x &@CRLF)
Sleep(10)
Next
$iStart = $i
EndFunc ;==>DoIt
Da ich es nicht für Maus schubsen und irgendwelche Tasten klicken benutzen will, halte ich dies für die bessere Lösung, da trotz kontinuierlicher Berechnun(en) alle Botschaften ankommen und abgearbeitet werden,
mfg (Auto)Bert
Schau mal über Hotkeyset mal an!!