Usando a palavra-chave IfWinActive no AutoHotKey

7

Esta questão sobre o uso do AutoHotKey é específica de um editor do Windows LaTeX chamado TeXnicCenter .

Então, eu estava tentando escrever meu primeiro script AutoHotKey (AHK) e queria que os atalhos estivessem disponíveis somente quando a janela do TeXniceCenter estivesse ativa. O AHK fornece a palavra-chave IfWinActive para lidar com esses cenários, no entanto, encontrei algumas dificuldades em usar essa palavra-chave.

Aqui está um arquivo de rascunho que eu escrevi:

SetTitleMatchMode, 2
SetTitleMatchMode, Slow

#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return

A linha #IfWinActive, .* TeXnicCenter *. , para que o padrão "TeXnicCenter" seja encontrado em algum lugar no nome da janela, não funciona.

Houve algumas outras opções que descartei

  • Eu uso o TeXnicCenter principalmente com projetos, para que o nome da janela apareça como " projectname - TeXnicCenter", então não é possível usar isso como o argumento para IfWinActive . Note que o nome da janela é TeXnicCenter se estiver trabalhando em documentos independentes.

  • Outra opção oferecida pelo AHK é que você usa algo chamado ahk_class do processo, que é tipicamente intuitivo (e pode ser obtido da útil ferramenta AHK, chamada Window Spy) - por exemplo, no caso do Chrome, é Chrome_WidgetWin_1 .

No entanto, para o TeXnicCenter, ele mostra a assinatura bizarra - por exemplo, para um dos meus projetos, é Afx:000000013F370000:8:0000000000010005:0000000000000000:0000000012B80087 , e não apenas isso, não é constante nas janelas do TeXnicCenter , como geralmente é para outros processos.

Eu estou perdido - alguém tem experiência em configurar o AHK com o TeXnicCenter e usar a palavra-chave IfWinActive ? Eu tenho a sensação de que isso pode ser melhor direcionado aos desenvolvedores do TeXnicCenter, mas espero que sim.

    
por tchakravarty 21.10.2012 / 19:35

1 resposta

8

Você usou SetTitleMatchMode para definir o modo de correspondência de títulos como 2 , o que significa que um título de janela pode conter o WinTitle em qualquer lugar dentro dele para ser compatível. Por isso, ele está tentando encontrar .* TeXnicCenter *. na barra de título. Você deve remover .* e *. (a menos que a barra de título realmente contenha aqueles que, até onde eu sei, não ). Você pode definir o modo de correspondência de títulos como RegEx se preferir usar a sintaxe regex (e, mesmo assim, o *. está incorreto, deve ser .* ).

Quanto à classe, tive o mesmo problema com o GraphEdit, que para a janela principal tem uma classe de janela como Afx:1000000:b:10011:6:1070780 com o mesmo padrão, mas números diferentes para cada instância. Eu resolvi usando o modo regex ( SetTitleMatchMode, RegEx ) e um padrão como ^Afx:.+:.:.+:.:.+$ - você pode especificar o número exato de dígitos entre os dois pontos, mas é improvável que você precise para .

(Acabei por simplificar todo o processo usando grupos .)

Então, no seu caso, você usaria um dos seguintes:

SetTitleMatchMode, 2
SetTitleMatchMode, Slow

#IfWinActive, TeXnicCenter
!t::
Send \texttt{{}{}}
return



SetTitleMatchMode, regex
SetTitleMatchMode, Slow

#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return

Aqui está minha recomendação:

SetTitleMatchMode, regex
SetTitleMatchMode, Slow
GroupAdd, TXC, ^.*TeXnicCenter.*$ ahk_class ^Afx:.+:.:.+:.+:.*$

#IfWinExist, ahk_group TXC
  !t::
    Send \texttt{{}{}}
  return
#IfWinExist
    
por 21.10.2012 / 20:08