1

Тема: Имитация периодического нажатия на другую клавишу.

Вечер добрый, задача такая: нужно чтобы при при использовании одной кнопки не чаще, чем раз в пять секунд, имитировалось нажатие другой. Казалось бы решение очевидно, но, к сожалению, с ahk  я "на Вы" и такой простой код не работает:


v_last := A_TickCount
~q::
v_delay := A_TickCount - v_last
if v_delay > 5000
{
	loop, 20 
	{
		send {q up}
		send {w}
		send {q down}
		v_last := A_TickCount
		Sleep, 5000
		if !GetKeyState("q", "P")
			break
	}
}

Скрипт по идее, должен при нажатии Q проверять - нажимали ли W в последние пять секунд и если нет, то нажимать W раз в пять секунд, пока зажата Q. Но увы - не работает. Где я накосорезил, как можно поправить? Заранее спасибо.

2

Re: Имитация периодического нажатия на другую клавишу.

По ТЗ под кодом в теории вышло это:

~w::
wTime := A_TickCount + 5000
return
~q::
if(wTime < A_TickCount)
 return
while GetKeyState("q", "P") && qTime < A_TickCount
{
 qTime := A_TickCount + 5000
 Send, {q}
}
return

3

Re: Имитация периодического нажатия на другую клавишу.

Пишу с телефона, тк не дома. И советую для надежности использовать виртуальные коды.

4 (изменено: yaul, 2016-09-20 20:45:49)

Re: Имитация периодического нажатия на другую клавишу.

Не работает, w не шлется. Для проверки вставил отладочный msgbox к ~w::.  100%, что w из этого скрипта не нажимается Описку с send {q} вместо send {w} поправил, естественно.

5 (изменено: alekksss, 2016-09-20 23:36:37)

Re: Имитация периодического нажатия на другую клавишу.

#SingleInstance force
~vk57:: ; W
wTime := A_TickCount + 5000
return
~vk51:: ; Q
if(wTime > A_TickCount)
 return
while GetKeyState("q", "P") && qTime < A_TickCount && wTime < A_TickCount
{
 qTime := A_TickCount + 5000
 Send, {vk57}
}
return

Проверял в блокноте. Если нажать W, Q будет ждать 5 секунд прежде чем цикл начал работу. Если отпускается Q цикл завершается (т.к. условие неверное)
PS: Дополнил, если в ходе работы цикла будет нажата W, скрипт будет ждать еще 5 секунд. Заменил всё на коды.

6

Re: Имитация периодического нажатия на другую клавишу.

Огромное спасибо, в блокноте работает как часы.