1 (изменено: raznoczvetov, 2014-06-22 13:31:15)

Тема: AHK: Двойное нажатие

Добрый день. Надо реализовать следующий сценарий двойного нажатия:
1. При нажатии клавиши (не при отпускании, а именно при нажатии) отправляется сама клавиша.
2. Если клавиша нажата второй раз, запускается другое действие.

Подскажите, пожалуйста, как это можно реализовать.
Не пойму, почему написанный мной сценарий не работает.

$vk58::   ; клавиша X
Gosub, Action1
KeyWait, vk58

; Запускаем опрос клавиши на предмет второго нажатия
Loop
{
   If GetKeyState(vk58, "P") = 1 ; если клавиша нажата (т. е. уже повторно нажата), то:
   {
      Goto, Action2
    }
   If (A_TimeSinceThisHotkey > 300 ) ; если время прошедшее после нажатия хоткея больше заданного параметра (dlclick_time)
   Break ; прекратить цикл
}
Return

Action1:
Send, {vk58}
Return
      
Action2:
Send, {vk56}
Return

2

Re: AHK: Двойное нажатие

$vk58:: ; X
Gosub % "Action" . p:= !p
KeyWait, vk58
Return
Action1:
   SendInput {vk58}
Return
Action0:
   SendInput {vk56}
Return

Для отдельно взятого случая из двух чередующихся клавиш:

$vk58:: ; X
SendInput % (p:= !p) ? "{vk58}" : "{vk56}"
KeyWait, vk58
Return

3 (изменено: raznoczvetov, 2014-06-22 13:28:55)

Re: AHK: Двойное нажатие

Да, но так она запускает второе действие в любом случае, если клавиша нажата второй раз, а надо, чтобы было ограничение по времени. Т. е. - если клавиша нажата второй раз, в течении 300 милисекунд с момента отжатия этой клавиши, то запускается другое действие.

Я извиняюсь, если в первом сообщении сделал неправильную постановку задачи - думал из примера кода это будет понятно.

4 (изменено: raznoczvetov, 2014-06-22 14:16:05)

Re: AHK: Двойное нажатие

В общем разобрался. Спасибо.