1 (изменено: autokey, 2018-03-21 14:54:59)

Тема: AHK: Как прервать цикл?

Есть цикл который спамит с паузами 123789, как его прервать во время исполнения нажатием клавиши 1 или 2

+ открыть спойлер
$1::
SetKeyDelay, 100
loop
{
send {1}
send {2}
sleep 500
send {3}
sleep 200
send {7}
send {8}
sleep 500
send {9}
sleep 200
}
return

2

Re: AHK: Как прервать цикл?

Поместите внутрь цикла условие, проверяя которое, произойдёт остановка, если оно содержит соответствующее значение. Например:


$1::
SetKeyDelay, 100
toggle := true
loop {
	if (toggle) {
		send {1}
		send {2}
		sleep 500
		send {3}
		sleep 200
		send {7}
		send {8}
		sleep 500
		send {9}
		sleep 200
	} else
		break
}
return
$2::
	toggle := false
return

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


SetKeyDelay, 100
toggle := false

$1::
	toggle := !toggle
	if (toggle)
		SetTimer, ToggleMe, 100
	else
		SetTimer, ToggleMe, Off
return

ToggleMe:
	send {1}
	send {2}
	sleep 500
	send {3}
	sleep 200
	send {7}
	send {8}
	sleep 500
	send {9}
	sleep 200
return

3 (изменено: autokey, 2018-03-21 21:30:55)

Re: AHK: Как прервать цикл?

2KusochekDobra
спасибо попробую через таймер, хотя мне нужно чтобы цикл обрывался и по клавише 1 и по клавише 2, и не прокручивался до конца после нажатия, а сразу обрывался

2stealzy
reload это немного не то что мне нужно.

4

Re: AHK: Как прервать цикл?

Тогда вставляйте проверку перед каждым Send.

5

Re: AHK: Как прервать цикл?

думал об этом, но у меня там около 100 строчек как то не красиво получается

6 (изменено: qqlexa, 2018-03-21 22:21:12)

Re: AHK: Как прервать цикл?

autokey,Создать функцию на проверку. Я как раз хочу найти об этом информацию, так как это годнота)

7

Re: AHK: Как прервать цикл?

autokey, а чего некрасивого-то?

loop
{
   send 1
   if !toggle
      break
   send 2
   if !toggle
      break
   send 3
   if !toggle
      break
}

8 (изменено: autokey, 2018-03-21 23:55:37)

Re: AHK: Как прервать цикл?

2Malcev когда в цикле более 100 строк и потенциально он еще разрастется раз в 10...
тогда уж проще будет запускать цикл отдельным скриптом и просто тушить его когда не нужен

9

Re: AHK: Как прервать цикл?

autokey, в AHK_H можно:
• делать Sleep внутри Send -

Send 12{500}3{200}78{500}9{200}

• запустить метку в отдельном потоке и завершить его в любой момент.

10 (изменено: teadrinker, 2018-03-22 12:18:28)

Re: AHK: Как прервать цикл?

Как вариант:

keyArray := [ ["1"], ["2", 500], ["3", 200], ["7"], ["8", 500], ["9", 200] ]

$1::
   Critical
   if (toggle := !toggle)
      SetTimer, StartStop, -10
   Return

StartStop:
   Loop  {
      for k, v in keyArray  {
         SendInput, % v[1]
         if v.HasKey(2)
            Sleep, v[2]
         if !toggle
            break 2
      }
   }
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: autokey, 2018-03-22 13:00:28)

Re: AHK: Как прервать цикл?

2teadrinker
спасибо с массивом будет не так громоздко, то что надо

и глупый вопрос про синтаксис
break 2 необходим для прерывания двух циклов или просто опечатка?