1

Тема: Прерывание цикла другого хоткея

Как прервать цикл заданый другим хоткеем


vk6A::
 SetTimer, SendInput_W, % (W_UpWait := !W_UpWait) ? 50 : "Off"
 SendInput_W:
  SendInput {Blind}3
Return



vk6D::
MouseGetPos, X, Y 
Sleep 5
SendInput {vk50}
Sleep 5
SendInput {Click 1032, 820}
Sleep 250
SendInput ^{Click 1314, 683}
Sleep 20
SendInput ^{Click 1314, 573}
Sleep 20
Click 812, 911
Sleep 20
MouseMove, X, Y, 0
Sleep 10
return

Нужно чтобы принажатии vk6D смотрелось - запущен ли хоткей vk6a, и если запущен то вначале останавливал бы прожатие клавиши заданой по vk6a, а в конце запускал его снова.

2 (изменено: Gutalin, 2018-01-19 21:49:54)

Re: Прерывание цикла другого хоткея

ralorttal, т.е. " хоткей vk6a" это бесконечный цикл, а  "хоткей vk6d" должен только один раз сделать свои действия?

AutoHotkey - 1.1.32.00

3

Re: Прерывание цикла другого хоткея

Да vk6a это цикл пока не будет прожата опять vk6a, а vk6d выполняет одноразовую последовательность, но цикл запущенный первым хоткеем ему мешает.

4 (изменено: Gutalin, 2018-01-19 22:02:54)

Re: Прерывание цикла другого хоткея

ralorttal,

vk6A::
y:=1
loop
{
 SetTimer, SendInput_W, % (W_UpWait := !W_UpWait) ? 50 : "Off"
 SendInput_W:
  SendInput {Blind}3
If t = 1 then 
break
else if t = 0
continue
}
Return



vk6D::
loop,1
{
If y = 1 
t:=1
MouseGetPos, X, Y 
Sleep 5
SendInput {vk50}
Sleep 5
SendInput {Click 1032, 820}
Sleep 250
SendInput ^{Click 1314, 683}
Sleep 20
SendInput ^{Click 1314, 573}
Sleep 20
Click 812, 911
Sleep 20
MouseMove, X, Y, 0
Sleep 10
if t=1
t:=0
}
return
AutoHotkey - 1.1.32.00

5

Re: Прерывание цикла другого хоткея

Потерялась возможность в данном варианте отключить прожатие клавиши хоткеем vk6A. Вторая часть вроде работает правильно.

6

Re: Прерывание цикла другого хоткея

ralorttal, в справке по SetTimer написано как его поставить на паузу и включить.

7

Re: Прерывание цикла другого хоткея

Да, только я не особо понимаю куда вставить этот кусок чтобы он не мешал выполнятся остальному.

8

Re: Прерывание цикла другого хоткея

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

9

Re: Прерывание цикла другого хоткея

А зачем цикл, если уже есть таймер?
Оставьте все как было, по vk6D если таймер влючен выключайте его и включайте обратно перед выходом из vk6D процедуры.

10 (изменено: ralorttal, 2018-01-21 05:11:22)

Re: Прерывание цикла другого хоткея

Вообщем я нашёл решение которое мне было нужно, если кому надо будет выкладываю что получилось:


d := 50

vk6A::
 SetTimer, SendInput_W, % (W_UpWait := !W_UpWait) ? d : "Off"
 SendInput_W:
  SendInput {Blind}3
Return



vk6D::

y:=0

If W_UpWait = d
 {
  % (W_UpWait := !W_UpWait) ? d : "Off"
  y:=1
 }



MouseGetPos, X, Y 
Sleep 5
SendInput {vk50}
Sleep 5
SendInput {Click 1032, 820}
Sleep 250
SendInput ^{Click 1314, 683}
Sleep 20
SendInput ^{Click 1314, 573}
Sleep 20
Click 812, 911
Sleep 20
MouseMove, X, Y, 0
Sleep 10

if y=1
 % (W_UpWait := !W_UpWait) ? d : "Off"

return