lucius100 Posted February 1, 2015 Share Posted February 1, 2015 Test loop in notepad, and i can't stop the loop #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Test", 146, 66, 268, 198) $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 _Write() EndSwitch WEnd Func _Write() While 1 ControlSend($App, "", "Edit1", "{5}") Sleep(5000) WEnd EndFunc Link to comment Share on other sites More sharing options...
czardas Posted February 1, 2015 Share Posted February 1, 2015 You can use a hotkey as shown below. Press F2 to get out of the loop and return to the main program. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $g_bGetOut = False ; Declare a global Flag. HotKeySet("{F2}","GetOut") ; Set a hotkey to call a function. #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 _Write() EndSwitch WEnd Func _Write() While 1 ControlSend($App, "", "Edit1", "{5}") Sleep(5000) If $g_bGetOut Then ExitLoop ; Check if the flag was altered. WEnd $g_bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $g_bGetOut = True ; Set the trigger. EndFunc operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
lucius100 Posted February 1, 2015 Author Share Posted February 1, 2015 You can use a hotkey as shown below. Press F2 to get out of the loop and return to the main program. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $g_bGetOut = False ; Declare a global Flag. HotKeySet("{F2}","GetOut") ; Set a hotkey to call a function. #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 _Write() EndSwitch WEnd Func _Write() While 1 ControlSend($App, "", "Edit1", "{5}") Sleep(5000) If $g_bGetOut Then ExitLoop ; Check if the flag was altered. WEnd $g_bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $g_bGetOut = True ; Set the trigger. EndFunc is it possible to stop the loop with the same button? Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted February 1, 2015 Moderators Share Posted February 1, 2015 (edited) Not really without using a toggle and an event method... however, interesting enough (almost too much lol)... that is not working for this user at the moment either. Edited February 1, 2015 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
lucius100 Posted February 1, 2015 Author Share Posted February 1, 2015 Not really without using a toggle and an event method... however, interesting enough (almost too much lol)... that is not working for this user at the moment either. k, how about to password protect file? i found >here , i tried the script Global $Password="password";put your password here... $pass = InputBox( "Password", "Please enter password", "", "*", 190, 115) If @Error Then Exit If $pass = $Password Then MsgBox( 1, "Accepted", "Password accepted!", 30) Else MsgBox( 1, "Rejected!", "Incorrect Password", 5) EndIf ;Rest of script goes here.... but the box is messy and where do i set the password for example 12345 ? Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted February 1, 2015 Moderators Share Posted February 1, 2015 You may want to look at the autoit wiki tutorials. This isn't really a step by step hold your hand while you learn type of thing. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
czardas Posted February 1, 2015 Share Posted February 1, 2015 (edited) There's a good tutorial about interrupting running functions here: https://www.autoitscript.com/wiki/Interrupting_a_running_function This isn't the neatest code I've ever written but it allows you to get out of the loop with either a hotkey or by clicking the same button again expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $bGetOut = False ; Declare a global Flag. Global $gb_Interrupt = 0 ; As above HotKeySet("{F2}","GetOut") ; Set a hotkey to call a function. Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) ; Intercept Windows command messages with out own handler GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 If $gb_Interrupt > 0 Then $gb_Interrupt = 0 Else GUICtrlSetData($Button1, "Stop") _Write() GUICtrlSetData($Button1, "Write") EndIf EndSwitch WEnd Func _Write() $gb_Interrupt = 1 While 1 ControlSend($App, "", "Edit1", "{5}") Sleep(2000) If $bGetOut Or $gb_Interrupt = 2 Then ExitLoop ; Check if the flag was altered. WEnd $bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $bGetOut = True ; Set the trigger. EndFunc Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $lParam If BitAND($wParam, 0x0000FFFF) = $Button1 And $gb_Interrupt = 1 Then $gb_Interrupt = 2 Return "GUI_RUNDEFMSG" ; $GUI_RUNDEFMSG EndFunc ;==>_WM_COMMAND ; I haven't got all my code snippets available to me right now. There should be a more elegant solution. Edited February 1, 2015 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
lucius100 Posted February 1, 2015 Author Share Posted February 1, 2015 There's a good tutorial about interrupting running functions here: https://www.autoitscript.com/wiki/Interrupting_a_running_function This isn't the neatest code I've ever written but it allows you to get out of the loop with either a hotkey or by clicking the same button again expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $bGetOut = False ; Declare a global Flag. Global $gb_Interrupt = 0 ; As above HotKeySet("{F2}","GetOut") ; Set a hotkey to call a function. Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) ; Intercept Windows command messages with out own handler GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 If $gb_Interrupt > 0 Then $gb_Interrupt = 0 Else GUICtrlSetData($Button1, "Stop") _Write() GUICtrlSetData($Button1, "Write") EndIf EndSwitch WEnd Func _Write() $gb_Interrupt = 1 While 1 ControlSend($App, "", "Edit1", "{5}") Sleep(2000) If $bGetOut Or $gb_Interrupt = 2 Then ExitLoop ; Check if the flag was altered. WEnd $bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $bGetOut = True ; Set the trigger. EndFunc Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $lParam If BitAND($wParam, 0x0000FFFF) = $Button1 And $gb_Interrupt = 1 Then $gb_Interrupt = 2 Return "GUI_RUNDEFMSG" ; $GUI_RUNDEFMSG EndFunc ;==>_WM_COMMAND ; I haven't got all my code snippets available to me right now. There should be a more elegant solution. That's really a nice modification, You may want to look at the autoit wiki tutorials. This isn't really a step by step hold your hand while you learn type of thing. I think ask at forum is better than learning myself with the bot. czardas 1 Link to comment Share on other sites More sharing options...
TheSaint Posted February 1, 2015 Share Posted February 1, 2015 I think ask at forum is better than learning myself with the bot. I was just about to offer some help too, until I saw that bad word. One presumes you have read the Forum Rules about Game Automation? See the link, at bottom right of every forum page, second link in. Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
JohnOne Posted February 1, 2015 Share Posted February 1, 2015 (edited) is it possible to stop the loop with the same button? I believe so, take a look at >this pause function for use with gui button, and apply the same logic. Edit: Actually the logic was a little different Edited February 1, 2015 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
Solution JohnOne Posted February 1, 2015 Solution Share Posted February 1, 2015 Here is czardas example modified to get out with hotkey or pressing the button again. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $g_bGetOut = False ; Declare a global Flag. HotKeySet("{F2}", "GetOut") ; Set a hotkey to call a function. #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 _Write() EndSwitch WEnd Func _Write() $Timer = TimerInit() While GUIGetMsg() <> $Button1 If TimerDiff($Timer) >= 1000 Then ControlSend($App, "", "Edit1", "{5}") $Timer = TimerInit() EndIf If $g_bGetOut Then ExitLoop ; Check if the flag was altered. WEnd $g_bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $g_bGetOut = True ; Set the trigger. EndFunc ;==>GetOut czardas and lucius100 2 AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
czardas Posted February 1, 2015 Share Posted February 1, 2015 (edited) JohnOne - That's a lot simpler than using GUIRegisterMsg(). I only thought of using the method in my second post, which I've used in several situations. A long complex process would make your solution less than ideal, but for this situation it seems fine. I see you needed to replace the blocking function Sleep() to achieve this. Good example BTW. TheSaint - What bot are you talking about? Edited February 1, 2015 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
lucius100 Posted February 1, 2015 Author Share Posted February 1, 2015 (edited) I was just about to offer some help too, until I saw that bad word. One presumes you have read the Forum Rules about Game Automation? See the link, at bottom right of every forum page, second link in. ofc i read that, sorry if bot is bad word, but what i ask here is simple task not game automation The bot i am implying is that autoit wiki bot Welcome to AutoIt 1-2-3 Learning to script with AutoIt v3 It's better to learn with human rather than robot. Here is czardas example modified to get out with hotkey or pressing the button again. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $g_bGetOut = False ; Declare a global Flag. HotKeySet("{F2}", "GetOut") ; Set a hotkey to call a function. #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 _Write() EndSwitch WEnd Func _Write() $Timer = TimerInit() While GUIGetMsg() <> $Button1 If TimerDiff($Timer) >= 1000 Then ControlSend($App, "", "Edit1", "{5}") $Timer = TimerInit() EndIf If $g_bGetOut Then ExitLoop ; Check if the flag was altered. WEnd $g_bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $g_bGetOut = True ; Set the trigger. EndFunc ;==>GetOut This script is great, and start and stop the loop for what i need. Really learn a lot here, thanks. JohnOne - That's a lot simpler than using GUIRegisterMsg(). I only thought of using the method in my second post, which I've used in several situations. A long complex process would make your solution less than ideal, but for this situation it seems fine. I see you needed to replace the blocking function Sleep() to achieve this. Good example BTW. TheSaint - What bot are you talking about? Thanks for your script too, but it's not really stable. btw, because i am new here, i want to know if i want to ask more thing unrelated to topic , should i create new topic or just ask all of them here? I want to ask about unzip now, found this looks great >LINK , but i wonder if that unzip support for password? Edited February 1, 2015 by lucius100 Link to comment Share on other sites More sharing options...
TheSaint Posted February 1, 2015 Share Posted February 1, 2015 (edited) I'm just waiting for clarification of the OP's use of the word, and would have thought it judicious for no-one else to respond until the OP does so, unless they know something i don't. EDIT Which OP just did. Edited February 1, 2015 by TheSaint Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
JohnOne Posted February 1, 2015 Share Posted February 1, 2015 btw, because i am new here, i want to know if i want to ask more thing unrelated to topic , should i create new topic or just ask all of them here? I want to ask about unzip now, found this looks great >LINK , but i wonder if that unzip support for password? New. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
czardas Posted February 1, 2015 Share Posted February 1, 2015 (edited) Thanks for your script too, but it's not really stable. In what sense? I guess you must be talking about inconsistant delays caused by Sleep(). Smaller sleep intervals in a nested loop, or using a timer as JohnOne has done, would fix this. If that's not it, then tell me what you are talking about. The interrupt process I used works well for intensive processing - it actually interrupts the script. If that happens when the script is sleeping, it returns to the same place in the script as before, in this case causing a delay. Basically, responce times need some fine tuning. Edited February 1, 2015 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
lucius100 Posted February 1, 2015 Author Share Posted February 1, 2015 In what sense? I guess you must be talking about inconsistant delays caused by Sleep(). Smaller sleep intervals in a nested loop, or using a timer as JohnOne has done, would fix this. If that's not it, then tell me what you are talking about. The interrupt process I used works well for intensive processing - it actually interrupts the script. If that happens when the script is sleeping, it returns to the same place in the script as before, in this case causing a delay. Since i am not really good at scripting yet, if the way i am talking is rude ,then i apologize, so don't get mad about this. Really English just not my main language. Link to comment Share on other sites More sharing options...
TheSaint Posted February 1, 2015 Share Posted February 1, 2015 (edited) @lucius100 - being the nice guy I am, I will take your word about the bot. The adlib functions might be of help to you. See the Help file. I've >posted a script (etc), where I've recently added a STOP function to the Query loop, changing the QUERY button text to STOP, while the Query loop is in progress. That uses the earlier AutoIt version names for those functions, but there are plenty of other examples here at the forum. There are a few other methods instead of adlib, like an extra EXE, that is a floating STOP button, where you can have a shared Registry or INI file key & value, etc. That latter option, if you can abide having a floating STOP button, is probably the most perfect, as it is quick and independent. It doesn't suffer issues where a user may click the STOP button additional times before it gets disabled, and thus have the process start up again, and again. I sometimes use CTRL or SHIFT as a hotkey stop & exit. Edited February 1, 2015 by TheSaint Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
czardas Posted February 1, 2015 Share Posted February 1, 2015 (edited) Since i am not really good at scripting yet, if the way i am talking is rude ,then i apologize, so don't get mad about this. Really English just not my main language. Don't worry. I just wanted to know what you meant by unstable. Here's what I mean: now there's a maximum of 50 ms delay which gives much better response times. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $bGetOut = False ; Declare a global Flag. Global $gb_Interrupt = 0 ; As above HotKeySet("{F2}","GetOut") ; Set a hotkey to call a function. Global $Form1 = GUICreate("Test", 146, 66, 268, 198) Global $Checkbox1 = GUICtrlCreateCheckbox("Test", 32, 8, 97, 17) Global $Button1 = GUICtrlCreateButton("Write", 32, 32, 75, 25) GUISetState(@SW_SHOW) ; Intercept Windows command messages with out own handler GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") Global $App = "Untitled - Notepad" WinWait($App) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 If $gb_Interrupt > 0 Then $gb_Interrupt = 0 Else GUICtrlSetData($Button1, "Stop") _Write() GUICtrlSetData($Button1, "Write") EndIf EndSwitch WEnd Func _Write() $gb_Interrupt = 1 While 1 ControlSend($App, "", "Edit1", "{5}") For $i = 1 To 40 ; 40 x 50 = 2000 Sleep(50) If $bGetOut Or $gb_Interrupt = 2 Then ExitLoop 2 ; Check if the flag was altered. Next WEnd $bGetOut = False ; Reset the flag in case you need to get out again later. EndFunc ;==>_Write Func GetOut() $bGetOut = True ; Set the trigger. EndFunc Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $lParam If BitAND($wParam, 0x0000FFFF) = $Button1 And $gb_Interrupt = 1 Then $gb_Interrupt = 2 Return "GUI_RUNDEFMSG" ; $GUI_RUNDEFMSG EndFunc ;==>_WM_COMMAND Both methods are fine - they each have their strengths and weaknesses. Edited February 1, 2015 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
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