1 (изменено: Mokson, 2021-08-26 16:47:25)

Тема: AHK: Не работает loop после первого выполнения команды

Здравствуйте. Я написал скрипт, где есть элементы pixelsearch и loop.

vk14::
    If isKeyPressed := !isKeyPressed    
        SetTimer, SendA, 40             
    Else
    {
        SetTimer, SendA, Off        
        Send {d Up}{r Up}                       
   }
  Loop
	{   
		PixelSearch, Px, Py, 387, 257, 551, 275, 0x2A2A2A, 1, Fast
		if (Errorlevel = 0)
		{
            Sleep 6000
			Click 448,348
			Sleep 5000
            Click 279,153
            Sleep 1000
            Click 302, 479
            Sleep 7000
            Click right
            Sleep 5000
            Click 399,167
            Sleep 7000
            Click right
            Send {space down}
		    Sleep 50
		    Send {space up}
            Sleep 50
		    Send {space down}
		    Sleep 50  
		    Send {space up}
            Sleep 5000
            Send {r down}
            Sleep 1000
            Send {r up}
            break
                      
                         			
		}
		sleep 30000   
            return 
	}
 
Loop
	{   ; loops until found:
		PixelSearch, Px, Py, 690, 235, 759, 309, 0x173952, 1, Fast
		if (Errorlevel = 0)
		{
          Sleep 1000
          Send {Numpad9 down}
          Sleep 300
          Send {Numpad9 up} 
          Sleep 1000
          Click right
          Sleep 2000
          Click 400,310
          Sleep 3000
          Click 435,204
          Sleep 5000
          Send {Numpad1 down}
          Sleep 300
          Send {Numpad1 up}
          Sleep 300
          Send {space down}
		  Sleep 50
	      Send {space up}
          Sleep 50
		  Send {space down}
		  Sleep 50 
		  Send {space up}
           Sleep 5000
            Send {r down}
           Sleep 1000
            Send {r up}
          break	
		}
		sleep 30000    
         return
	}
    KeyWait vk14                                       
    return

SendA:
    Send {d Down}{r Down}
    return

Проблема здесь:

 Loop
	{   
		PixelSearch, Px, Py, 387, 257, 551, 275, 0x2A2A2A, 1, Fast
		if (Errorlevel = 0)
		{
            Sleep 6000
			Click 448,348
			Sleep 5000
            Click 279,153
            Sleep 1000
            Click 302, 479
            Sleep 7000
            Click right
            Sleep 5000
            Click 399,167
            Sleep 7000
            Click right
            Send {space down}
		    Sleep 50
		    Send {space up}
            Sleep 50
		    Send {space down}
		    Sleep 50  
		    Send {space up}
            Sleep 5000
            Send {r down}
            Sleep 1000
            Send {r up}
            break
                      
                         			
		}
		sleep 30000   
            return 
	}
 

И здесь:

Loop
	{   ; loops until found:
		PixelSearch, Px, Py, 690, 235, 759, 309, 0x173952, 1, Fast
		if (Errorlevel = 0)
		{
          Sleep 1000
          Send {Numpad9 down}
          Sleep 300
          Send {Numpad9 up} 
          Sleep 1000
          Click right
          Sleep 2000
          Click 400,310
          Sleep 3000
          Click 435,204
          Sleep 5000
          Send {Numpad1 down}
          Sleep 300
          Send {Numpad1 up}
          Sleep 300
          Send {space down}
		  Sleep 50
	      Send {space up}
          Sleep 50
		  Send {space down}
		  Sleep 50 
		  Send {space up}
           Sleep 5000
            Send {r down}
           Sleep 1000
            Send {r up}
          break	
		}
		sleep 30000    
         return
	}
    KeyWait vk14                                       
    return

Задумка такова: в обоих кодах выполняется loop до тех пор, пока не будет найден пиксель, чтобы начать выполнять заданные действия. Если пиксель не найден, loop ждёт 30 секунд и начинает искать дальше (если пиксель не находится, loop будет работать исправно и не прервётся). Когда я запускаю скрипт и нужный пиксель находится, код без проблем начинает работать, выполняя все мои заданные действия. После первого выполнения команд, команда loop перестаёт  работать и, соответственно, pixel search тоже прекращает свою работу.

Я только учусь писать коды и не понимаю, как решить эту проблему.  Помогите с кодом, пожалуйста.

2

Re: AHK: Не работает loop после первого выполнения команды

Mokson пишет:

После первого выполнения команд, команда loop перестаёт  работать

Подпрограмма перестаёт работать, когда доходит до Return.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Mokson, 2021-08-26 22:11:07)

Re: AHK: Не работает loop после первого выполнения команды

teadrinker Проблема решена, но дело было не только в этом. Спасибо за  замечание, я не заметил, что случайно написал return, но проблема была не только в этом. loop прекращал работу после первого успешного выполнения errorlevel 0, а мне надо было сделать так, чтобы loop работал постоянно, не выключаясь. В итоге, после всех исправлений, получилось это:

 Loop
	{   
         Loop
             {
		PixelSearch, Px, Py, 387, 257, 551, 275, 0x2A2A2A, 1, Fast
		if (Errorlevel = 0)
		{
            Sleep 6000
			Click 448,348
			Sleep 5000
            Click 279,153
            Sleep 1000
            Click 302, 479
            Sleep 7000
            Click right
            Sleep 5000
            Click 399,167
            Sleep 7000
            Click right
            Send {space down}
		    Sleep 50
		    Send {space up}
            Sleep 50
		    Send {space down}
		    Sleep 50  
		    Send {space up}
            Sleep 5000
            Send {r down}
            Sleep 1000
            Send {r up}
            break
                      
                         			
		}
		sleep 30000   
          }
	}

Loop внутри loop

4

Re: AHK: Не работает loop после первого выполнения команды

Можно оставить только один цикл и вместо break, использовать continue.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)