1

У меня есть краткий вопрос со сценарием ниже:

global Eme_Fn_idle := true

F1 UP:: 
    MsgBox, F1_up ; ★I wish to see this after pressing and releaseing F1+F9
    Eme_Fn_idle = true
return

F1 & F9::
    if (Eme_Fn_idle) {
        Eme_Fn_idle = false
        Eme_ClickOnDocTab(0, 0, 18)
    }
    else {
        Send ^!. ; switch to Right Document
    }
return

Я могу видеть F1_up только когда нажимаю и отпускаю F1 в одиночку. НО, когда я нажимаю F1 , нажимаю F9, отпускаю F9, отпускаю F1 , я не вижу F1_up . Как это увидеть?

Autohotkey 1.1.13.1

1 ответ1

0

Я тоже не понимаю этого поведения. Очевидно, что F1 UP блокируется программой, как показано в истории ключей (от второй до последней строки ниже, s означает, что она подавлена или заблокирована):

h=Hook Hotkey, s=Suppressed (blocked)

70  03B s   d   0.89    F1              temp.ahk
70  03B h   u   0.17    F1              
0D  01C     d   0.31    Enter           temp.ahk
0D  01C     u   0.17    Enter           temp.ahk
70  03B s   d   1.36    F1              
78  043 h   d   0.17    F9              
78  043 s   u   0.16    F9              
70  03B s   u   0.45    F1              
26  148     d   0.95    Up 

Вы могли бы добавить F1 & F9 UP:: но это будет отлавливать условие ИЛИ либо F1, либо F9 при отпускании, поэтому при 4-х тактном нажатии (F1 вниз, F9 вниз, F9 вверх, F1 вверх) будет срабатывать на F9 Up, а не на F1 Up.

Одним из возможных решений было бы создание собственной процедуры для определения состояния ключей и последующего независимого вызова вашего кода. Возможно, это связано с первой проблемой, но, похоже, GetKeyState не работает, если вы добавляете фактический вызов F1:: или вызов F1 & F9:: , поэтому попробуйте протестировать этот автономный вариант, чтобы убедиться, что он работает правильно, прежде чем интегрировать его с чем-либо еще. ,

waitingForF1Up := false
CheckF1Up:
    Loop
    {
        F1 := GetKeyState("F1", "P")
        F9 := GetKeyState("F9", "P")

        tooltip % F1 ", " F9

        if F1 and F9 and not waitingForF1Up
        {
            SetTimer, F1andF9, -1
            waitingForF1up := True
        }
        else if not F1 and waitingForF1up
        {
            SetTimer, F1up, -1
            waitingForF1up := False
        }

        sleep 10

    }

return

F1up:
    tooltip F1 up executed
    sleep 1000
    tooltip
return

F1andF9:
    tooltip F1 and F9 executed
    sleep 1000
    tooltip
return

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .