#autohotkey
#автоотключение
Вопрос:
Я хотел бы просто заставить скрипт продолжаться ТОЛЬКО после успешного PixelSearch. ie.
- Повторяйте 1-3 раза до успешного поиска пикселей
- Повторяйте 4-6 раз до успешного поиска пикселей
- Повторяйте 7-9 раз до успешного поиска пикселей, перерыв
Это то, что у меня есть сейчас. Чем мне заменить перерыв?
;stuff
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel = 0
break //???
;stuff
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel = 0
break //???
;stuff
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel = 0
break
}
Комментарии:
1. Не могли бы вы опубликовать весь свой скрипт, а также то, что должен делать скрипт? В настоящее время я не вижу цикл, который вы упомянули в своем вопросе, и я не понимаю контекста этого скрипта / что этот скрипт должен делать в целом.
2. Мне не нравится, когда очевидный правильный ответ не принимается OP
Ответ №1:
Короткий ответ: Вы хотели бы заменить break
на return
.
Длинный ответ: Break
и Continue
используются, когда вы пытаетесь выйти из любого типа зацикливаемого оператора. Чтобы остановить выполнение большинства других частей сценариев, таких как раздел автоматического выполнения, горячая клавиша, подпрограмма или функция, вы должны использовать оператор return . Кроме того, я не думаю, что некоторые другие части вашего скрипта работают так, как вы предполагаете. Например, при текущем использовании ваш ErrorLevel
скрипт будет эффективно продолжен только в том случае, если ни один из упомянутых пикселей не будет найден на экране. Это происходит потому , что ваш условный оператор , который проверяет , должна ли программа прекратить выполнение , проверяет наличие if ErrorLevel = 0
. Из ранее связанных документов уровень ошибки будет равен 0 только в том случае, если пиксель был успешно найден, что означает, что будет возвращено ненулевое значение, если пиксель не найден. Чтобы исправить это в вашем коде, мы можем просто изменить if ErrorLevel = 0
его на if ErrorLevel
всякий раз, когда он появляется в коде.
Измененный код:
;Move other stuff up here
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel
return
;stuff
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel
return
;stuff
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel
return
MsgBox, complete
;put code that you want to run after the condition is met here
return
Ответ №2:
Примечание: это был ответ на версию вопроса, предшествовавшую разъяснению. Я опубликовал новый ответ, который должен лучше решить эту проблему.
Исходя из того, что я понимаю, вот решение GoSub, которое запускает подпрограмму, если PixelSearch не удается найти pixel / ErrorLevel = 0:
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel = 0
gosub, subroutine
PixelSearch, Px, Py, 995, 256, 999, 262, 0x84BCD1, 40, Fast
if ErrorLevel = 0
gosub, subroutine
subroutine:
;insert whatever code you want to run in between the line above and the return
MsgBox, This is a subroutine. No matching pixels were found
return
Комментарии:
1. Как написано, будет ли это GoSub, когда PixelSearch будет успешным или неудачным? Я пытаюсь заставить его работать следующим образом: Повторяйте 1-3 до успешного поиска пикселей, повторяйте 5-8 до успешного поиска пикселей, повторяйте 10-13 до успешного поиска пикселей, затем прерывайте
2. Я отредактировал свой пост, чтобы уточнить. Я прошу прощения за то, что сначала это было так беспорядочно.
3. @vtDemo Я вижу, это не будет делать то, что вы хотите. Я создам новый скрипт для решения этого проясненного вопроса.