Kebaan Posted August 6, 2008 Share Posted August 6, 2008 Well, as the topic describes I'm a newbie To learn scripting in AutoIt I've been trying to make a simple automated mouseclicker which clicks X times on some position. My problem is that the whole thing isn't working. I hope some of you will be able to help me out as im kinda stuck atm :/ ;Logic needed to start the primary script $Start = False ;I've made the MsgBox to test if the position of the mouse worked, and if my Logic worked. $GetPosKey = "{ENTER}" HotKeySet($GetPosKey, '_GetPos') Func _GetPos() $Start = True $pos = MouseGetPos() MsgBox(0, "Mouse position (x;y) and $Start's value:", $pos[0] & "," & $pos[1] & "," & $Start, 2) EndFunc ;Script is closed when ESC is pressed $ExitKey = "{ESC}" HotKeySet($ExitKey, '_Exit') Func _Exit() Exit EndFunc ;I think ive done something wrong here? Do While 1 Sleep(1000) ; Just idle around WEnd Until $Start = True ;This is the primary script that should be run when $Start = True $count = 0 Do MouseClick( "primary" , 560, 610 ) Sleep(1500) $count += 1 Until $count = 10 Link to comment Share on other sites More sharing options...
herewasplato Posted August 6, 2008 Share Posted August 6, 2008 (edited) Welcome to the forums. See if you can follow my modifications:Global $pos Global $Start = False HotKeySet("{ENTER}", '_GetPos') HotKeySet("{ESC}", '_Exit') Do Sleep(100) ; Just idle around Until $Start = True For $i = 1 To 10 MouseClick("primary", $pos[0], $pos[1]) Sleep(1500) Next Func _GetPos() $Start = True $pos = MouseGetPos() MsgBox(0, "Mouse position (x;y) and $Start's value:", $pos[0] & ", " & $pos[1] & ", " & $Start, 2) EndFunc ;==>_GetPos Func _Exit() Exit EndFunc ;==>_Exit Edit: Global thingy done :-) Edited August 6, 2008 by herewasplato [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
muhmuuh Posted August 6, 2008 Share Posted August 6, 2008 (edited) in my modest opinion you should make $start and $pos global variables and change Do While 1 Sleep(1000) ; Just idle around WEnd Until $Start = True to Do Sleep(1000) ; Just idle around Until $Start = True because it loops infinitely Edited August 6, 2008 by muhmuuh I ran. I ran until my muscles burned and my veins pumped battery acid. Then I ran some more. Link to comment Share on other sites More sharing options...
Kebaan Posted August 6, 2008 Author Share Posted August 6, 2008 Ahh yea, thank you very much Theres so many ways to do things and I can see that your way is way better than mine as it's working But I have some questions! Why didn't my script work, my logic tells me that it should work? In this part of your script, you wrote global $pos = .... I've tried to delete Global and then nothing worked, why is that? and what do global do? Func _GetPos() $Start = True Global $pos = MouseGetPos() MsgBox(0, "Mouse position (x;y) and $Start's value:", $pos[0] & ", " & $pos[1] & ", " & $Start, 2) EndFunc ;==>_GetPos Link to comment Share on other sites More sharing options...
herewasplato Posted August 6, 2008 Share Posted August 6, 2008 (edited) ...Why didn't my script work, my logic tells me that it should work?...The script enters your Do/Until loop and then enters the While/WEnd loop. Your HotKey changes $Start from False to True... ...but the script never reaches the Until $Start = True ...line of code to evaluate the True/False state. The script is stuck inside an infinite While/WEnd loop.Do While 1 Sleep(1000) ; Just idle around WEnd Until $Start = True ...and what do global do? ...Ask muhmuuh :-) Edited August 6, 2008 by herewasplato [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
muhmuuh Posted August 6, 2008 Share Posted August 6, 2008 your script doesn't work mainly because of the Do While 1 Sleep(1000); Just idle around WEnd Until $Start = True part. You never get out of the while loop And the thing that "Global" does that it makes a variable the same for all functions (global variable). If you dont put global you have local variables that 'work' only for the function that they are in. Local variables may have the same name as other local variables but they are completely different. In your case you have one variable $start that is in the main function and another that is in the _Getpos function and they are different. I hope you understand my messy explanation and I suggest you read the help file for a better one. I ran. I ran until my muscles burned and my veins pumped battery acid. Then I ran some more. Link to comment Share on other sites More sharing options...
Kebaan Posted August 6, 2008 Author Share Posted August 6, 2008 (edited) Duh. That was a pretty stupid mistake Muhmuuh why is it better to make the variables Global? I've tested it and I can't see the difference :S EDIT: nvm I just saw your answer Thnaks for the help both of you! Edited August 6, 2008 by Kebaan Link to comment Share on other sites More sharing options...
herewasplato Posted August 7, 2008 Share Posted August 7, 2008 ...And the thing that "Global" does...Thanks - I had to go chase another rabbit. [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Kebaan Posted August 7, 2008 Author Share Posted August 7, 2008 (edited) One last thing - just to understand it! Why is this: For $i = 1 To 10 MouseClick("primary", $pos[0], $pos[1]) Sleep(1500) Next better than: Do Sleep(1000); Just idle around Until $Start = True Edited August 7, 2008 by Kebaan Link to comment Share on other sites More sharing options...
herewasplato Posted August 7, 2008 Share Posted August 7, 2008 (edited) One last thing - just to understand it! Why is this: For $i = 1 To 10 MouseClick("primary", $pos[0], $pos[1]) Sleep(1500) Next better than: Do Sleep(1000); Just idle around Until $Start = True This:For $i = 1 To 10 MouseClick("primary", $pos[0], $pos[1]) Sleep(1500) NextoÝ÷ Ú·©§vØb±«¢+ØÀÌØí½Õ¹ÐôÀ)¼(5½ÕÍ ±¥¬ ÅÕ½ÐíÁÉ¥µÉäÅÕ½Ðì°ÔØÀ°ØÄÀ¤(M±À ÄÔÀÀ¤(ÀÌØí½Õ¹Ð¬ôÄ)U¹Ñ¥°ÀÌØí½Õ¹ÐôÄÀ...because a For/Next loop has an incrementing or decrementing index already built in. There is no need to: Set $count to zero Increment $count with each loop Edit: BTW - it is good to ask such questions Edited August 7, 2008 by herewasplato [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Kebaan Posted August 7, 2008 Author Share Posted August 7, 2008 Thanks for the explanation I must say that I'm surprised by this forum. You often get alot stupid answers on other forums when asking questions it's good to get good answers for once Link to comment Share on other sites More sharing options...
herewasplato Posted August 7, 2008 Share Posted August 7, 2008 Thanks for the explanation I must say that I'm surprised by this forum. You often get alot stupid answers on other forums when asking questions it's good to get good answers for once This is a great community of forum members. If time allows - you will probably get plenty of help.You posted the code that you had attempted in your first post of this thread (without us having to ask for you to show some effort). That is a big plus for getting a quick reply.Hang around - enjoy AutoIt and the forums :-) [size="1"][font="Arial"].[u].[/u][/font][/size] Link to comment Share on other sites More sharing options...
Kebaan Posted August 7, 2008 Author Share Posted August 7, 2008 (edited) just finished this litle project. to end this topic i thought i would post my final result not that I think that you can use it for anything, but whatever Global $pos Global $Start = False Global $Title = "Automated mouse clicker!" HotKeySet("^g", '_GetPos') HotKeySet("{ESC}", '_Exit') MsgBox( 0, $Title, "Welcome to my automated mouse clicker!" ) Global $NumberOfClicks = InputBox( $Title, "Here you can choose how many times you want the clicker to click!" ) MsgBox( 0, $Title, "Press ""CTRL+g"" to choose the position where you want the script to click!" ) Do Sleep(100);==>Idle Until $Start = True For $i = 1 To $NumberOfClicks MouseClick("primary", $pos[0], $pos[1]) Sleep(1500) Next;==>Click chosen # of times at the chosen position Func _GetPos() $Start = True $pos = MouseGetPos() MsgBox(0, $Title ,"Mouse position (x;y) = (" & $pos[0] & ", " & $pos[1] & ")" ) EndFunc ;==> Get the mouse's position Func _Exit() Exit EndFunc ;==> Exit the script Edited August 7, 2008 by Kebaan 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