Como usar o input / textarea focus como condição para hotkeys

3

Eu tenho o AutoHotkey configurado de uma maneira que reconhece as teclas Cmd + Esquerda e Cmd + Direita como a navegação Voltar / Avançar no Chrome.

O problema é que ele também reconhece essas teclas sendo pressionadas enquanto eu estou inserindo texto em caixas de texto. No entanto, ao inserir texto, eu gostaria que essas combinações de teclas executassem diferentes funções - pule para o início / fim da linha, similar a Ctrl + Esquerda / Direito .

Existe uma maneira de ter um mapeamento funcionando para caixas de texto e outro mapeamento para todo o restante no AutoHotkey?

    
por Art 27.06.2012 / 04:09

1 resposta

8

O AutoHotkey (AHK) mais profundo pode detectar no Google Chrome, relacionado ao conteúdo da Web, o controle Chrome_RenderWidgetHostHWND1 . Esse controle é a viewport para o conteúdo da web. Nossos elementos input e textarea HTML estão um pouco mais detalhados, dentro do DOM do conteúdo renderizado.

Portanto, precisamos encontrar uma maneira de nos comunicarmos por meio dessa parede entre os elementos HTML e o AutoHotkey. Felizmente, há um jogador do mesmo lado que o HTML que fala o jargão do AHK: JavaScript !

Como assim? Para simplificar, o JavaScript pode executar uma ação quando um elemento ganha ou perde o foco. Uma dessas ações pode estar alterando o título da página. Isso, por sua vez, altera o título da janela do Google Chrome, e o AHK pode ler os títulos das janelas!

Configuração:

  1. Instale meu InputFocusTitleChange.user.js userscript. ( Fonte )

  2. Agora você pode usar a seguinte sintaxe no AutoHotkey:

    SetTitleMatchMode, RegEx
    
    #x:: ; normal hotkey
         ; do something
        return
    
    #IfWinActive, \[AHK\] - Google Chrome$
        #x:: ; input/textarea focus hotkey
             ; do something
            return
    
    #IfWinActive
    

Demonstração:

Quando um elemento HTML input ou textarea tem foco, o userscript acrescenta [AHK] ao título da página, alterando o título da janela do Google Chrome.

O AHK pode usar essa característica, se o título da janela terminar em "[AHK] - Google Chrome" ou não, para conectar indiretamente HTML input / textarea focus com um conjunto de comandos.

Notas:

Do meu teste, há dois problemas:

  1. Se o input / textarea já estiver focalizado quando a página for carregada, [AHK] talvez não seja adicionado ao título da página. Você precisa afastar o foco do elemento e voltar para obter o título para mudar.

  2. Se o elemento input / textarea for gerado dinamicamente após o carregamento da página (isso também é quando o script é carregado), esses elementos não terão efeito algum.

I will continue to work on this solution. If you have any suggestions or know of a way to counter these JavaScript issues, please feel free to let me know and/or contribute. The source is posted above and hosted on Github.

    
por 29.06.2012 / 00:56