Autohotkey, como detectar a liberação da chave quando essa chave é usada como um prefixo

1

Eu tenho uma pergunta concisa com o script abaixo:

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

Eu só consigo ver F1_up quando pressiono e solto F1 sozinho. MAS, quando eu apertar F1, aperte F9, solte F9, libere F1 , não consigo ver F1_up . Como vê-lo de qualquer maneira?

Autohotkey 1.1.13.1

    
por Jimm Chen 04.02.2015 / 02:47

1 resposta

0

Eu também não entendo esse comportamento. Obviamente, o F1 UP está sendo bloqueado pelo programa como mostrado no histórico de chaves (a segunda até a última linha abaixo tem um significado s que é suprimido ou bloqueado):

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 

Você poderia adicionar um F1 & F9 UP:: , mas pegaria uma condição OR de F1 ou F9 sendo liberada, então em uma 4-press (F1 Down, F9 Down, F9 Up, F1 Up), ele dispararia no F9 Up, não no F1 Up.

Uma possível solução seria criar sua própria rotina para detectar o estado das chaves e depois chamar seu código de forma independente. Provavelmente relacionado ao primeiro problema, mas o GetKeyState parece não funcionar se você adicionar a chamada F1:: real ou F1 & F9:: , então tente testar este standalone para ver se funciona antes de integrá-lo com qualquer outra coisa. / p>

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
    
por 26.09.2015 / 08:55

Tags