Como reajo a uma janela perdendo / ganhando foco no AHK?

0

Eu jogo Guild Wars 2 e há uma função para mostrar os nomes dos itens que podem ser interagidos, mas a chave deve ser pressionada. Eu estou fazendo isso em um toggle, mas eu gostaria que funcionasse mesmo depois de alternar entre janelas.

Depois de religar a função ao F3 no jogo, alternar a tecla parece tão simples quanto este script:

#IfWinActive Guild Wars 2
LAlt::
    if (GetKeyState("F3")) {
        Send, {F3 up}
    } else {
        Send, {F3 down}
    }
#IfWinActive

No entanto, quando a janela perde o foco, presumo que a tecla esteja pressionada desde quando ela recupera o foco, preciso pressionar a alternância duas vezes para que ela comece a mostrar o que eu quero, novamente.

Idealmente, eu quero um caminho para a chave ser liberada quando a janela perder o foco e pressionada novamente quando a janela recuperar o foco. Como eu conseguiria isso?

    
por Koviko 10.11.2015 / 15:49

1 resposta

0

Você pode pesquisar o status WinActive em um loop separado e, em seguida, executar uma ação se a janela ativa for alterada. Como alternativa, você ainda pode usar um loop separado, mas use WinWaitNotActive e WinWaitActive para executar as ações necessárias. Em outras palavras, você verifica qual janela está ativa (obtém a janela ativa no momento) e depois espera que ela não esteja ativa antes de fazer qualquer outra coisa. Uma vez que não está ativo, você verifica a janela ativa novamente, faz algo apropriado se for a janela certa e depois volta a esperar por aquela janela para não estar mais ativa.

Para ativar o loop separado somente quando F3 está habilitado, você pode usar SetTimer para habilitar / desabilitar a execução repetitiva de uma rotina separada, ou apenas usar uma variável compartilhada que é verificada repetidamente, onde o estado da variável compartilhada muda de estado ao mesmo vez que você envia F3 para cima ou para baixo no código que você postou.

    
por 15.11.2015 / 08:15

Tags