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

17 (изменено: Gutalin, 2018-08-21 17:11:11)

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

А что, если так?

Settimer, Loop, on
Return

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

f2:: 
Settimer, Loop, off
Return	
AutoHotkey - 1.1.29.01

18

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

Gutalin, а вы сами свой скрипт запускать пробовали?

19 (изменено: Gutalin, 2018-08-21 18:19:49)

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

Malcev, у меня все работает, а что не так? (Только что лично проверил).

AutoHotkey - 1.1.29.01

20 (изменено: Malcev, 2018-08-21 18:24:58)

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

Нафаня пишет:

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

21 (изменено: Gutalin, 2018-08-21 18:29:13)

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

Malcev, Ваш код мне не показал, что я сделал не так, извините.
Заново запустить можно с помощью:

Settimer, Loop, on

Не имея код, могу лишь предложить засунуть это также через Хоткей:

f3:: 
Settimer, Loop, on
Return	

Или в Label.

AutoHotkey - 1.1.29.01

22

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

Чем тогда ваш вариант отличается от:
http://forum.script-coding.com/viewtopi … 23#p125323

23

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

Malcev, не увидел, признаю.

AutoHotkey - 1.1.29.01

24

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

а не легче сделать простую проверку на нажатие клавиши внутри цикла?


F2::
Sleep, 2000
Loop
{
Getkeystate state, F2, P
if state = D
{
Break
}
Send f3
Sleep, 1000
}
Люблю когда мне понижают репутацию (мне правда все равно)