autohotkey help- # inputlevel mas não sobrescreve a combinação de teclas?

0

[ajuda] #nível de nível, mas não sobrescreve a combinação de teclas?

eu tenho um script de 2 letras, ambos remapear "k", mas o script 1 tem "scrollock & k"

script1.ahk

k::msgbox script1
scrolllock & k::click

script2.ahk

k::msgbox script2

eu quero isso: quando executar o script ao mesmo tempo, se eu pressionar k, ele irá executar o script2.ahk (que mostra "msgbox script2"),

de outra maneira, o script2 sobrescreve o script1

então eu coloco # inputlevel2 em script2.ahk

agora parece com isso

script1.ahk

k::msgbox script1
scrolllock & k::click

script2.ahk

#inputlevel2
k::msgbox script2

mas agora, se eu pressionar "scrolllock & k", ele não fará o clique (função de script1) mas mostra msgbox (script2)  Eu acho que porque "k" foi sobrescrito pelo script2  e "scrollock & k" não será mais reconhecido

eu encontrei uma maneira de fazer o scrolllock & k trabalho, quando eu recarregar script1, e pressione scrolllock & k, vai funcionar

mas se eu recarregar o script2, terei que recarregar o script1 novamente para fazer com que essa combinação de teclas funcione

De outra forma, minha pergunta é É possível sobrescrever "k" de script2 para "k" de script1, mas ainda funciona como "scrolllock & k" do script1?

Obrigado

    
por nav 20.10.2015 / 02:41

1 resposta

1

Não tenho certeza de como isso funciona com #InputLevel .

Uma solução pode ser usar uma chamada de função comum de ambos os scripts carregados por meio de uma instrução #Include . Teria que detectar se o script2 está em execução e não executar se o script2 estiver em execução.

Script2 também teria que deixar a chave k passar para Script1, então scrolllock & k funcionaria no Script1.

O código abaixo é um exemplo, não testado - tenho certeza de que há maneiras mais elegantes de resolver isso, mas pode funcionar ou aproximá-lo. Não é exatamente como eu iria codificá-lo, mas pretende ser mais um exemplo.

; -----------------------
; Script1.ahk
; -----------------------
#Persistent
k::functionk(A_ScriptName)
scrollock & k::Click
#Include functionCalls.ahk

; -----------------------
; Script2.ahk
; -----------------------
#Persistent
Script2Running("Set", True)      ; auto-execute when script2 starts
OnExit(Script2Exit)
return

~k::functionk(A_ScriptName)      ; tilde should let k pass through to script1

Script2Exit()
{
    Script2Running("Set",False)
}
#Include functionCalls.ahk

; -----------------------
; functionCalls.ahk
; -----------------------
functionk(callersScriptName)
{
    if (callersScriptName="script1.ahk") and not script2Running()
    {
        msgbox script1
        ; add code as needed
    }
    else if (callersScriptName="script2.ahk")
    {
        msgbox script2    
        ; add code as needed
    }
    else
        msgbox Unrecognized script name: %callersScriptName%
}

Script2Running(SetOrRead := "", newState := false)  
{
    static running := false
    if (SetOrRead="Set")
        running := newState

    return running       ; same as 'return %running%', see help topic on return
}
    
por 21.10.2015 / 05:13

Tags