1

Тема: AHK: два #IfWinActive срабатывание скрипта, по обоим условиям

Скрипт для браузера:
XButton1
действия для окна "Speed Dial"
1- одиночное нажатие посылает F7
2- двойное нажатие посылает ctrl + T
3- двойное нажатие и удержание кнопки ctrl + shift + T

действия в любом окне
1- одиночное нажатие посылает ctrl + W
2- двойное нажатие посылает ctrl + T
3- двойное нажатие и удержание кнопки ctrl + shift + T

Проблема:
при двойном нажатии и удержании XButton1 в окне Speed Dial
срабатывает и ctrl +shift+T (как и должно быть) и ctrl+W (первое условие на одиночное нажатие во всех окнах)

#SingleInstance Force
#NoTrayIcon
SetTitleMatchMode, 2

#IfWinActive Speed Dial
XButton1::
{
    ToolTip
    KeyWait, %A_ThisHotkey%
    KeyWait, %A_ThisHotkey%, D T0.1
    If ErrorLevel
        {
            Send {sc41} ; F7 если одиночный клик
        }
    Else
        {
        Sleep 200
        GetKeyState, state, XButton1, P
        if state = D
            {
            Send ^+{SC014} ; ctrl + shift + T если двойной клик и удерживаеться кнопка
            }
        else
            {
            Send ^{SC014} ; ctrl + T если двойной клик
            }
        }
    KeyWait, %A_ThisHotkey%
    Return
}
#IfWinActive
XButton1::
{
    KeyWait, %A_ThisHotkey%
    KeyWait, %A_ThisHotkey%, D T0.1
    If ErrorLevel
        {
        Send ^{vk57} ; ctrl + W если одиночный клик
        }
    Else
        {
        Sleep 200
        GetKeyState, state, XButton1, P
        if state = D
            {
            Send ^+{SC014} ; ctrl + shift + T если двойной клик и удерживаеться кнопка
            }
        else
            {
            Send ^{SC014} ; ctrl + T если двойной клик
            }
        }
    KeyWait, %A_ThisHotkey%
    Return
}

2

Re: AHK: два #IfWinActive срабатывание скрипта, по обоим условиям

Для чего столько повторяющегося на 95% кода? Тем более что #IfWinActive тут и не нужен.

#SingleInstance Force
#NoTrayIcon
SetTitleMatchMode, 2
Return
XButton1::
{
    KeyWait, %A_ThisHotkey%
    KeyWait, %A_ThisHotkey%, D T0.2
    If ErrorLevel
        {
        Send % WinActive("Speed Dial")  ? "{sc41}" : "^{vk57}"
        }
    Else
        {
        Sleep 200
        GetKeyState, state, XButton1, P
        if state = D
            {
            Send ^+{SC014} ; ctrl + shift + T если двойной клик и удерживаеться кнопка
            }
        else
            {
            Send ^{SC014} ; ctrl + T если двойной клик
            }
        }
    KeyWait, %A_ThisHotkey%
    Return
}

3

Re: AHK: два #IfWinActive срабатывание скрипта, по обоим условиям

Irbis спасибо.

Irbis пишет:

Для чего столько повторяющегося на 95% кода? Тем более что #IfWinActive тут и не нужен.

Как видел задачу, так и записал.
А это я просто не понимаю:

Send % WinActive("Speed Dial")  ? "{sc41}" : "^{vk57}"

вижу что она делает, но воссоздать подобную пока, что не могу.

4

Re: AHK: два #IfWinActive срабатывание скрипта, по обоим условиям

Прочитай статью Переменные и выражения, в части "Операторы в выражениях" есть и эта конструкция, тернарный оператор.