JotaPx Posted February 17, 2014 Posted February 17, 2014 Hi, i've been scripting around a bit with autoit but i always had this problem that i find a bit stupid on my part: ~Can't stop a script execution during a rotine... "duh!" you may say else take a look at this sample script: expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $main = GUICreate("5.5 seconds!",1100,25,125,0,-1,$WS_EX_TOPMOST) $prog = GUICtrlCreateProgress(0,0,1000,25) $OK = GUICtrlCreateButton("GO!",1000,0,25,25) $Stop = GUICtrlCreateButton("Stop",1025,0,50,25) $label = GUICtrlCreateLabel("-",1075,0,25) GUICtrlSetState($Stop,$GUI_DISABLE) GUICtrlSetState($main,$GUI_ONTOP) GUISetState() $go = 1 while 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit case $msg = $OK GUICtrlSetState($OK,$GUI_DISABLE) GUICtrlSetState($Stop,$GUI_ENABLE) Do $msg = GUIGetMsg() GUICtrlSetData($prog,0) sleep(1000) GUICtrlSetData($prog,20) sleep(1000) GUICtrlSetData($prog,40) sleep(1000) GUICtrlSetData($prog,60) sleep(1000) GUICtrlSetData($prog,80) sleep(1000) GUICtrlSetData($prog,100) sleep(250) MouseClick("left") until $msg = $GUI_EVENT_CLOSE EndSelect WEnd How can i use the Stop button to Stop the rotine? Any toughts on that? best regards
FireFox Posted February 18, 2014 Posted February 18, 2014 (edited) Hi,There are many ways to do it, and I have chosen the Timers. The GUIGetMsg function can only catch messages when it's called, in your loop you have sleep functions avoiding the msgs to be caught.expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Local $iPhase = 0, $iStep = 20, $iMax = 100 Local $hTimer = 0, $fGo = False $main = GUICreate("5.5 seconds!", 1100, 25, 125, 0, -1, $WS_EX_TOPMOST) $prog = GUICtrlCreateProgress(0, 0, 1000, 25) $OK = GUICtrlCreateButton("GO!", 1000, 0, 25, 25) $Stop = GUICtrlCreateButton("Stop", 1025, 0, 50, 25) $label = GUICtrlCreateLabel("-", 1075, 0, 25) GUICtrlSetState($Stop, $GUI_DISABLE) GUICtrlSetState($main, $GUI_ONTOP) GUISetState() $go = 1 $hTimer = TimerInit() While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE Exit Case $OK $fGo = True GUICtrlSetState($OK, $GUI_DISABLE) GUICtrlSetState($Stop, $GUI_ENABLE) GUICtrlSetData($prog, 0) Case $Stop $fGo = False GUICtrlSetState($OK, $GUI_ENABLE) GUICtrlSetState($Stop, $GUI_DISABLE) EndSwitch If $fGo Then If $iPhase = $iMax / $iStep _ ;last step done And TimerDiff($hTimer) >= 250 Then MouseClick("left") $iPhase = 0 ;reset counter ElseIf TimerDiff($hTimer) >= 1000 Then GUICtrlSetData($prog, ($iPhase + 1) * $iStep) $iPhase += 1 $hTimer = TimerInit() EndIf EndIf WEndBr, FireFox. Edited February 18, 2014 by FireFox JotaPx 1
JotaPx Posted February 18, 2014 Author Posted February 18, 2014 Hi, There are many ways to do it, and I have chosen the Timers. The GUIGetMsg function can only catch messages when it's called, in your loop you have sleep functions avoiding the msgs to be caught. expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Local $iPhase = 0, $iStep = 20, $iMax = 100 Local $hTimer = 0, $fGo = False $main = GUICreate("5.5 seconds!", 1100, 25, 125, 0, -1, $WS_EX_TOPMOST) $prog = GUICtrlCreateProgress(0, 0, 1000, 25) $OK = GUICtrlCreateButton("GO!", 1000, 0, 25, 25) $Stop = GUICtrlCreateButton("Stop", 1025, 0, 50, 25) $label = GUICtrlCreateLabel("-", 1075, 0, 25) GUICtrlSetState($Stop, $GUI_DISABLE) GUICtrlSetState($main, $GUI_ONTOP) GUISetState() $go = 1 $hTimer = TimerInit() While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE Exit Case $OK $fGo = True GUICtrlSetState($OK, $GUI_DISABLE) GUICtrlSetState($Stop, $GUI_ENABLE) GUICtrlSetData($prog, 0) Case $Stop $fGo = False GUICtrlSetState($OK, $GUI_ENABLE) GUICtrlSetState($Stop, $GUI_DISABLE) EndSwitch If $fGo Then If $iPhase = $iMax / $iStep _ ;last step done And TimerDiff($hTimer) >= 250 Then MouseClick("left") $iPhase = 0 ;reset counter ElseIf TimerDiff($hTimer) >= 1000 Then GUICtrlSetData($prog, ($iPhase + 1) * $iStep) $iPhase += 1 $hTimer = TimerInit() EndIf EndIf WEnd Br, FireFox. That seamed to do the trick. Will be giving a think about it. Thanks a mil
JotaPx Posted February 18, 2014 Author Posted February 18, 2014 (edited) Just made a couple of minor changes so it resets when stop is pressed: expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Local $iPhase = 0, $iStep = 20, $iMax = 100 Local $hTimer = 0, $fGo = False $main = GUICreate("5.5 seconds!", 1100, 25, 125, 0, -1, $WS_EX_TOPMOST) $prog = GUICtrlCreateProgress(0, 0, 1000, 25) $OK = GUICtrlCreateButton("GO!", 1000, 0, 25, 25) $Stop = GUICtrlCreateButton("Stop", 1025, 0, 50, 25) $label = GUICtrlCreateLabel("-", 1075, 0, 25) GUICtrlSetState($Stop, $GUI_DISABLE) GUICtrlSetState($main, $GUI_ONTOP) GUISetState() $hTimer = TimerInit() While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE Exit Case $OK $fGo = True GUICtrlSetState($OK, $GUI_DISABLE) GUICtrlSetState($Stop, $GUI_ENABLE) GUICtrlSetData($prog, 0) Case $Stop $fGo = False $iPhase = 0 GUICtrlSetData($prog, 0) GUICtrlSetState($OK, $GUI_ENABLE) GUICtrlSetState($Stop, $GUI_DISABLE) EndSwitch If $fGo Then If $iPhase = $iMax / $iStep _ ;last step done And TimerDiff($hTimer) >= 1000 Then GUICtrlSetData($prog, $iMax) MouseClick("left") $iPhase = 0 ;reset counter ElseIf TimerDiff($hTimer) >= 1000 Then GUICtrlSetData($prog, ($iPhase ) * $iStep) $iPhase += 1 $hTimer = TimerInit() EndIf EndIf WEnd Once again ty very much for the helpfull knowledge Edited February 18, 2014 by JotaPx
JotaPx Posted February 18, 2014 Author Posted February 18, 2014 hi again, srry for the multi fast posting as i am sleepy xD what does de "_" do in: If $iPhase = $iMax / $iStep _ ;last step done thanks
kylomas Posted February 18, 2014 Posted February 18, 2014 continuation character so the statement can span multiple lines Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now