1

Тема: AHK: хоткей по двойному нажатию с зажатым модификатором

Приветствую!

Я работаю в программе, в которой Alt - основной модификатор. Мне уже не достаточно обычных хоткеев (Alt+1), есть намерение расширить функционал. К примеру, при зажатом Alt произвожу двойное, тройное или длительное нажатие одной клавиши - исполняется хоткей, отжимаю Alt.

Пробовал решить вопрос несколькими способами, и всё неудачно.
Буду рад помощи, совету.

Никак не реагирует на нажатие едички:

Alt::

GetKeyState, state, Alt
    if State = D
        {
        KeyWait, 1, T1
        {
        if ErrorLevel = 1
            MsgBox 1
        Else 
            MsgBox 2
        }
        }
    else
        MsgBox Up

KeyWait сразу идёт на else:

!1::
KeyWait, 1, D T1
if ErrorLevel = 1
MsgBox 1
else
MsgBox 2

Редко и не понятно в какой ситуации выскакивает MsgBox 3:

Alt::
KeyWait, 1, D T1
if ErrorLevel = 1 
{
KeyWait, 1, D T1
if ErrorLevel = 1 
MsgBox 2
else
MsgBox 1

}
else 
MsgBox 3
Return

2

Re: AHK: хоткей по двойному нажатию с зажатым модификатором

Что-то типа этого?


!1::
    KeyWait, 1
    KeyWait, 1, D T0.3
    If ErrorLevel = 1
        MsgBox, Alt+1
    Else
        MsgBox, Alt+1+1
    Return

3

Re: AHK: хоткей по двойному нажатию с зажатым модификатором

Спасибо за ответ! Скрипт работает на "ура!". Со своей стороны могу предложить работающий вариант для тройного нажатия:

!1::
if Alt1_presses > 0
{
Alt1_presses += 1
SetTimer, KeyAlt1, 300
return
}
Alt1_presses = 1
SetTimer, KeyAlt1, 300
return

KeyAlt1:
SetTimer, KeyAlt1, off
KeyWait, Alt, L     ; then up "Alt"
if Alt1_presses = 1
    MsgBox 1
else
if Alt1_presses = 2
    MsgBox 2
else
if Alt1_presses >=  3
    MsgBox 3
Alt1_presses = 0
return

4 (изменено: serzh82saratov, 2015-09-06 01:43:40)

Re: AHK: хоткей по двойному нажатию с зажатым модификатором

произвожу двойное, тройное или длительное нажатие одной клавиши

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


#UseHook 

!1::
<^!+#2::
    HK := RegExReplace(A_ThisHotkey, "S)[\Q+^!#<>~*$\E]"), i := 0  
    KeyWait, %HK%, T0.7
    If !ErrorLevel 
        Loop  {
            KeyWait, %HK%
            KeyWait, %HK%, D T0.3
        } Until !(++i) || ErrorLevel 
    Try Gosub % A_ThisHotkey "_" i 
    Return

!1_3:  
    MsgBox Alt+1+1+1 
    Return
    
!1_0:   
    MsgBox Удержание Alt+1 более 0.7 секунд
    Return
    
<^!+#2_5: 
    MsgBox LCtrl+Alt+Shift+Win+2+2+2+2+2
    Return

+ 2 вариант, с регистрацией длительного удержания на любом этапе.

#UseHook 

!1::
<^!+#2::
    HK := RegExReplace(A_ThisHotkey, "S)[\Q+^!#<>~*$\E]"), i := 0   
    Loop  {
        KeyWait, %HK%, T0.7
        i := ErrorLevel ? -1 : i
        KeyWait, %HK%, D T0.2
    } Until !(++i) || ErrorLevel 
    Try Gosub % A_ThisHotkey "_" i 
    Return

!1_3:  
    MsgBox Alt+1+1+1 
    Return
    
!1_0:   
    MsgBox Удержание Alt+1 более 0.7 секунд
    Return
    
<^!+#2_5: 
    MsgBox LCtrl+Alt+Shift+Win+2+2+2+2+2
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: хоткей по двойному нажатию с зажатым модификатором

Благодарю за ответы. Поколдую с вашими вариантами. Прошу прощения, если поднял уже многократно обсужденный вопрос. Треды, где обсуждалось обычное двойное нажатие, я нашел, но с зажатым модификатором вызвало у меня затруднение.