1 (изменено: Нафаня, 2018-05-13 15:34:25)

Тема: AHK: Завершение цикла при нажатии горячей клавиши

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

Loop
{
Sendinput {Up down}
Sleep 230
Sendinput {Up up}
Sleep 200
}

2 (изменено: qqlexa, 2018-05-14 20:49:57)

Re: AHK: Завершение цикла при нажатии горячей клавиши

В этом примере нужен перезапуск скрипта.


	Loop
	{
		if x=1 
			break
		Sendinput {Up down}
		Sleep 230
		Sendinput {Up up}
		Sleep 200
	}	
return

F2::
x:=1
return

3

Re: AHK: Завершение цикла при нажатии горячей клавиши

Есть так же цикл 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

Подробнее об этом, читайте в справке. EN, РУ.

4

Re: AHK: Завершение цикла при нажатии горячей клавиши

qqlexa, пробовал, когда останавливаешь скрипт, он больше не запускается, потому не подходит. Sorry.

5

Re: AHK: Завершение цикла при нажатии горячей клавиши

Команду pause используйте.

6 (изменено: qqlexa, 2018-05-14 20:48:50)

Re: AHK: Завершение цикла при нажатии горячей клавиши

В вашей просьбе было сказано только лишь о остановке цикла, а о перезапуске речи не было.


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

7

Re: AHK: Завершение цикла при нажатии горячей клавиши

qqlexa, почему не используете отступы, ведь читать неудобно:

If x=0
x:=1
x:=0
return

8

Re: AHK: Завершение цикла при нажатии горячей клавиши

Ладно, все или не работает, или что-то просто я туплю, мне нужно что-то такое:

Условие: Если нажата «горячая клавиша», то прервать цикл.

9 (изменено: qqlexa, 2018-05-14 20:57:22)

Re: AHK: Завершение цикла при нажатии горячей клавиши


Условие: Если нажата «горячая клавиша», то прервать цикл.

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

10 (изменено: qqlexa, 2018-05-14 19:28:32)

Re: AHK: Завершение цикла при нажатии горячей клавиши

Malcev пишет:

qqlexa, почему не используете отступы, ведь читать неудобно:

If x=0
x:=1
x:=0
return

Как это лучше бы сделать?

11

Re: AHK: Завершение цикла при нажатии горячей клавиши

qqlexa, читатьпредложениебезпробеловтакжепроблематичнокакчитатьчужойкодбезотступов.
Хоть и возможно.

12

Re: AHK: Завершение цикла при нажатии горячей клавиши

KusochekDobra, Носом тыкните как сделать и всё. Не могу понять где именно нет отступов, для меня всё читабельно.

13

Re: AHK: Завершение цикла при нажатии горячей клавиши

qqlexa пишет:

В вашей просьбе было сказано только лишь о остановке цикла, а о перезапуске речи не было.


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

Отступы визуализируют ветвление кода, показывая отношение блоков кода к их операторам.
Вам, может быть понятно течение Вашей мыли, даже если Вы его не отображаете текстом и примерами, но, если Вы, всё же делаете описание, то лучше уж считайте всех вокруг тупыми людьми, которым всё нужно разжёвывать, тогда чем качественней будет посыл, тем однозначней он будет воспринят.

14

Re: AHK: Завершение цикла при нажатии горячей клавиши

KusochekDobra, мне очень понравился Ваш ответ. Буду меняться.

15

Re: AHK: Завершение цикла при нажатии горячей клавиши

qqlexa, прости, но тоже не подходит, я не думал что все так сложно... Когда зажат F3, цикл прерывается, но когда его отжать он опять возобновляет, у меня так компьютер глючить начал.

16

Re: AHK: Завершение цикла при нажатии горячей клавиши

#If loop
F12::
Pause toggle
return
#If

F12::
loop := 1
loop    
{
   tooltip % a_index
}
return