Тема: AHK: Завершение цикла при нажатии горячей клавиши
Здравствуйте, читал много чего и так и не понял... Как сделать, чтоб цикл заканчивался при нажатии горячей клавиши?
Loop
{
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте, читал много чего и так и не понял... Как сделать, чтоб цикл заканчивался при нажатии горячей клавиши?
Loop
{
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
В этом примере нужен перезапуск скрипта.
Loop
{
if x=1
break
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
return
F2::
x:=1
return
Есть так же цикл While-loop, который в начале каждой итерации проверяет результат возвращаемый выражением, завершая запуск вложенного блока, когда будет возвращено false:
while (x == 1)
{
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
return
F2::
x := 10
return
Но более управляемые конструкции циклов организуются таймерами:
F2::
if (x := !x)
SetTimer, Cycle, 400
else
SetTimer, Cycle, Off
return
Cycle:
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
return
qqlexa, пробовал, когда останавливаешь скрипт, он больше не запускается, потому не подходит. Sorry.
Команду pause используйте.
В вашей просьбе было сказано только лишь о остановке цикла, а о перезапуске речи не было.
x:=0
F2::
Loop
{
if x=1
break
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
return
F3::
If x=0
x:=1
x:=0
return
qqlexa, почему не используете отступы, ведь читать неудобно:
If x=0
x:=1
x:=0
return
Ладно, все или не работает, или что-то просто я туплю, мне нужно что-то такое:
Условие: Если нажата «горячая клавиша», то прервать цикл.
Условие: Если нажата «горячая клавиша», то прервать цикл.
x:=0
F2::
Loop
{
if x=1 ; Если клавиша зажата
break ; Выходим из цикла
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
return
F3::
x:=1 ; Выполнить это ; Заблокирует цикл
KeyWait, %A_ThisHotKey%, U ; Ждать отжимания клавиши, в данном случае F3, можно заменить на любую другую
x:=0 ; Открывает цикл
return
qqlexa, почему не используете отступы, ведь читать неудобно:
If x=0 x:=1 x:=0 return
Как это лучше бы сделать?
qqlexa, читатьпредложениебезпробеловтакжепроблематичнокакчитатьчужойкодбезотступов.
Хоть и возможно.
KusochekDobra, Носом тыкните как сделать и всё. Не могу понять где именно нет отступов, для меня всё читабельно.
В вашей просьбе было сказано только лишь о остановке цикла, а о перезапуске речи не было.
x:=0 F2:: Loop { if x=1 break Sendinput {Up down} Sleep 230 Sendinput {Up up} Sleep 200 } return F3:: If x=0 x:=1 x:=0 return
x:=0
F2::
Loop
{
if x=1
break
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
return
F3::
If x=0
x:=1
x:=0
return
Отступы визуализируют ветвление кода, показывая отношение блоков кода к их операторам.
Вам, может быть понятно течение Вашей мыли, даже если Вы его не отображаете текстом и примерами, но, если Вы, всё же делаете описание, то лучше уж считайте всех вокруг тупыми людьми, которым всё нужно разжёвывать, тогда чем качественней будет посыл, тем однозначней он будет воспринят.
KusochekDobra, мне очень понравился Ваш ответ. Буду меняться.
qqlexa, прости, но тоже не подходит, я не думал что все так сложно... Когда зажат F3, цикл прерывается, но когда его отжать он опять возобновляет, у меня так компьютер глючить начал.
#If loop
F12::
Pause toggle
return
#If
F12::
loop := 1
loop
{
tooltip % a_index
}
return
А что, если так?
Settimer, Loop, on
Return
Loop:
{
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}
f2::
Settimer, Loop, off
Return
Gutalin, а вы сами свой скрипт запускать пробовали?
Malcev, у меня все работает, а что не так? (Только что лично проверил).
когда останавливаешь скрипт, он больше не запускается, потому не подходит. Sorry.
Malcev, Ваш код мне не показал, что я сделал не так, извините.
Заново запустить можно с помощью:
Settimer, Loop, on
Не имея код, могу лишь предложить засунуть это также через Хоткей:
f3::
Settimer, Loop, on
Return
Или в Label.
Чем тогда ваш вариант отличается от:
http://forum.script-coding.com/viewtopi … 23#p125323
Malcev, не увидел, признаю.
а не легче сделать простую проверку на нажатие клавиши внутри цикла?
F2::
Sleep, 2000
Loop
{
Getkeystate state, F2, P
if state = D
{
Break
}
Send f3
Sleep, 1000
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться