1

Тема: AHK: Как выйти из цикла и продолжить выполнение скрипта

Добрый день. Подскажите как можно выйти из цикла и продолжить выполнение скрипта, если в теле цикла есть горячая клавиша ?

В приведенном ниже коде : мы нажимаем на Ф11, дальше выполняем действие и получаем сообщение с двумя выборами "да/нет". Если нажимаем "нет" - то мы должны выйти из скрипта, там откроется уже окно (gui), вообщем продолжить выполнение скрипта. Если нажимаем "да", то заново выполняем цикл.

Сейчас если мы нажмем на "да" - то цикл начнется заного, то есть все ок. А если нажмем "нет", то на этом все заканчивается и дальше уже скрипт не выполняется.
Что я делаю не так ? Подскажите пж


Loop
{
MsgBox, 4096, Нажмите F11

F11::

TH := 2 ; Толщина рамки

CoordMode, mouse
MouseGetPos, x, y ; Получаем Координаты курсора 

x:=Round(x) ; область для скана
y:=Round(y)
w := 90 ; ширина области и высота
h := 60
   
Gui, +LastFound +ToolWindow -Caption +AlwaysOnTop 
Gui, Color, Red ; рамка
Gui, Show, x%X% y%Y% w%W% h%H% Hide
Options := "0-0 " W "-0 " W "-" H " 0-" H " 0-0 " TH "-" TH
    . " " W-TH "-" TH " " W-TH "-" H-TH " " TH "-" H-TH " " TH "-" TH
WinSet, Region, % Options
Gui, Show, NA
KeyWait, F11
Gui, Destroy	

Mcoord := [x,y,w,h] 
text := OCR(Mcoord) 

MsgBox, 4357, Зону можно перевыбрать
IfMsgBox Cancel
	break
else
	continue
}

Gui, +LastFound +ToolWindow +AlwaysOnTop 
Gui, Add, DropDownList, x50 y50 w40 h100 vChoice gLabel, 1|2|3|4
......

2

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

Тут гляньте.

3

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

ypppu Посмотрел, переписал цикл, добавил метку. Как return так и exit - программа просто останавливается и не продолжает выполнение


OnceAg:
MsgBox, 4096,Нажмите F11

F11::

Loop, 1
{
	...
}

MsgBox, 4357, Зону можно перевыбрать
IfMsgBox Cancel
	return
else
	goto OnceAg

Gui, +LastFound +ToolWindow +AlwaysOnTop 
Gui, Add, DropDownList, x50 y50 w40 h100 vChoice gLabel, 1|2|3|4

4

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

Суть в том, чтобы внутрь цикла поместить условие и при каждой итерации проверять его истинность.

5

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

ypppu Так в первом варианте было условие в цикле и мы выходили из цикла командой "break", вот только скрипт дальше переставал выполняться...

6

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

Я ответил на вопрос "как можно выйти из цикла и продолжить выполнение скрипта". А как у Вас в теле цикла очутилась горячая клавиша - ума не приложу. Сами придумали? Непонятно, зачем это сделано.

7 (изменено: Botsy, 2020-09-04 13:56:43)

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

ypppu я поместил горячую кнопку в цикл, думая что это решит следующую проблему: в скрипте написано использование более одной горячей клавиши и получается так, что когда мы нажимаем на 1-ую горячую клавишу, она выполняет скрипт и игнорирует все остальные:


nextStep:
MsgBox, Нажмите F11 

F11::

Loop, 1
{
....
}

MsgBox, 4357, Зону можно перевыбрать
IfMsgBox Cancel
	goto [b]nextStep1[/b] ; продолжаем выполнение скрипта
else
	goto [b]nextStep[/b] ; идем в самый вверх и как бы заново запускаем скрипт 

nextStep1:
Gui, +LastFound +ToolWindow +AlwaysOnTop 
Gui, Add, DropDownList, x50 y50 w40 h100 vChoice gLabel, 1|2|3|4
Gui, ....
return

Label:
Gui, Submit, NoHide
If Choice = 1
enc1 := 1
...
return
InpX = Your

OK:
Gui, Hide

MsgBox, нажми F9

F9::

MouseGetPos, posX, posY
posXrand := posX + 25
posYrand := posY + 25

MsgBox, нажми F10

F10::

MouseGetPos, posX1, posY1
posX1rand := posX1 + 25
posY1rand := posY1 + 25

Как тогда в этом случае поступить ?

8

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

Botsy пишет:

я поместил горячую кнопку в цикл, думая что это решит следующую проблему: в скрипте написано использование более одной горячей клавиши и получается так, что когда мы нажимаем на 1-ую горячую клавишу, она выполняет скрипт и игнорирует все остальные

Как тогда в этом случае поступить ?

Скрипт длинный, вникать в него нет возможности. Могу сказать, что после нажатия одной горячей клавиши скрипт не должен игнорировать остальные горячие клавиши. Если возникают такого рода проблемы, нужно отрабатывать все фрагменты скрипта по отдельности. Так сказать, сначала составьте "скелет" скрипта, а потом наращивайте "мясо". И тогда выяснится, на котором этапе он начинает себя вести неправильно.

9

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

ypppu ок перефразирую. Как продолжать выполнять секцию авто-выполнения, между двумя горячими клавишами?


F1::
.....
return

code..... (сейчас вот эта часть не выполняется вообще. Если убрать верхний return, то скрипт не остановиться перед следующей горячей клавишей

F2::
...
return

10

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

Значит нужно разобраться с понятиями. В 9 сообщении Вы приводите код, в котором нету секции автовыполнения. Горячая клавиша может быть прописана хоть в начале, хоть в середине, хоть в конце скрипта, и при этом она будет рабочей. Принято горячие клавиши помещать в конец скрипта, после секции автовыполнения.
И ещё такой нюанс: если скрипт начинается с горячей клавиши, то AutoHotkey подразумевает, что перед ней стоит Return.

11

Re: AHK: Как выйти из цикла и продолжить выполнение скрипта

ypppuскорее всего я понял мою ошибку и уже догадываюсь как исправить скрипт. Спасибо!