East_Arctica Posted September 5, 2019 Share Posted September 5, 2019 I was trying to make an AutoIt script that any pixel with the color 0xB200 in the coordinate range 0,0 to 100, 200 but I also wanted it to repeatedly search for that pixel until I use my hotkey {esc} to stop the search, and {esc} to start it again. Heres my current code, the issue is that it won't do anything when I click {esc} #include <AutoItConstants.au3> HotKeySet("{esc}","Loop") $looping = 0 Func Loop() If $looping == 1 Then ; if it is searching stop searching $looping = 0 Else Do $coord = PixelSearch(0, 0, 100, 200, 0xB200) If Not @error Then MouseClick($MOUSE_CLICK_LEFT, $coord[0], $coord[1], 2, 1) MsgBox(0, " Clicked at X:", $coord[0] & "and Y:" & $coord[1]) EndIf Until $looping <> 0 $looping = 1 EndIf EndFunc Thanks in advance! Link to comment Share on other sites More sharing options...
badcoder123 Posted September 5, 2019 Share Posted September 5, 2019 #include <AutoItConstants.au3> HotKeySet("{esc}", "Loop") $looping = 0 Loop() While 1 ConsoleWrite("Searching" & @LF) $coord = PixelSearch(0, 0, 100, 200, 0xB200) If Not @error Then MouseClick($MOUSE_CLICK_LEFT, $coord[0], $coord[1], 2, 1) MsgBox(0, " Clicked at X:", $coord[0] & "and Y:" & $coord[1]) EndIf WEnd Func Loop() $looping = Not $looping ConsoleWrite("Paused" & @LF) While $looping Sleep(200) WEnd EndFunc ;==>Loop Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted September 5, 2019 Share Posted September 5, 2019 @East_Arctica Which application are you trying to automate? PixelSearch() is not the most reliable function to automate applications Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
East_Arctica Posted September 5, 2019 Author Share Posted September 5, 2019 Im using this to automate chrome. (Should i just go down the javascript path instead? Link to comment Share on other sites More sharing options...
East_Arctica Posted September 5, 2019 Author Share Posted September 5, 2019 9 hours ago, badcoder123 said: #include <AutoItConstants.au3> HotKeySet("{esc}", "Loop") $looping = 0 Loop() While 1 ConsoleWrite("Searching" & @LF) $coord = PixelSearch(0, 0, 100, 200, 0xB200) If Not @error Then MouseClick($MOUSE_CLICK_LEFT, $coord[0], $coord[1], 2, 1) MsgBox(0, " Clicked at X:", $coord[0] & "and Y:" & $coord[1]) EndIf WEnd Func Loop() $looping = Not $looping ConsoleWrite("Paused" & @LF) While $looping Sleep(200) WEnd EndFunc ;==>Loop Hmmm, First off you cant just use a function like this "Loop()" you need to call it like this Call("Loop") in order for it to run. Second, wouldn't the Loop needs to be run after it was defined? It is only sending "Paused" to console and never sends "Searching" when I try to use this. After some more testing, it seems that it wasn't detecting the ESC key being pressed, I edited it to +1 (Shift+1) and it showed the Paused when it started and the Paused when I clicked it. It then stopped the script with exit code 0 Link to comment Share on other sites More sharing options...
BrewManNH Posted September 5, 2019 Share Posted September 5, 2019 You don't need to use the Call function to call a function, it's redundant. Here's a modified script that might work as intended. #include <AutoItConstants.au3> HotKeySet("{esc}", "Loop") HotKeySet("{tab}", "_Exit") $Paused = 0 ;~ Loop() While 1 If Not $Paused Then ConsoleWrite("Searching" & @LF) $coord = PixelSearch(0, 0, 100, 200, 0xB200) If Not @error Then MouseClick($MOUSE_CLICK_LEFT, $coord[0], $coord[1], 2, 1) MsgBox(0, " Clicked at X:", $coord[0] & "and Y:" & $coord[1]) EndIf Sleep(1000) ; <<<< Sleeps for 1 second before searching again Else ConsoleWrite("Paused" & @CRLF) Sleep(1000) ; << Used so it's not spamming the console all the time EndIf WEnd Func Loop() $Paused = Not $Paused EndFunc ;==>Loop Func _Exit() Exit EndFunc East_Arctica 1 If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
East_Arctica Posted September 5, 2019 Author Share Posted September 5, 2019 9 hours ago, BrewManNH said: You don't need to use the Call function to call a function, it's redundant. Here's a modified script that might work as intended. #include <AutoItConstants.au3> HotKeySet("{esc}", "Loop") HotKeySet("{tab}", "_Exit") $Paused = 0 ;~ Loop() While 1 If Not $Paused Then ConsoleWrite("Searching" & @LF) $coord = PixelSearch(0, 0, 100, 200, 0xB200) If Not @error Then MouseClick($MOUSE_CLICK_LEFT, $coord[0], $coord[1], 2, 1) MsgBox(0, " Clicked at X:", $coord[0] & "and Y:" & $coord[1]) EndIf Sleep(1000) ; <<<< Sleeps for 1 second before searching again Else ConsoleWrite("Paused" & @CRLF) Sleep(1000) ; << Used so it's not spamming the console all the time EndIf WEnd Func Loop() $Paused = Not $Paused EndFunc ;==>Loop Func _Exit() Exit EndFunc Thanks Brew, that worked perfectly, didn't know about the Call not being needed. when i tried to use mine it was erroring so i was confused. 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