Pergunta, questão
Eu gostaria que o AutoHotkey detecta automaticamente quando uma certa caixa de diálogo pop-up aparece e executa determinadas ações. Como faço isso?
Exemplo concreto
No meu caso específico, eu gostaria que o AutoHotkey fechasse a caixa de diálogo Atualizar sumário, que o Word exibe quando eu quero atualizar o sumário.
Este é o fluxo de trabalho:
- Eu atualizo os títulos no meu documento do Word
- Eu pressiono Ctrl+ Apara selecionar o documento inteiro
- Eu pressiono F9para atualizar todos os campos
Esta caixa de diálogo modal irritante aparece (que não pode ser configurada de acordo com minhas pesquisas no Google)
Agora, preciso pressionar Arrow downpara selecionar Atualizar tabela inteira, seguido Enterde pressionar Ok e continuar
Gostaria que o AutoHotkey emita automaticamente o comando Arrow down, Enterporque o fluxo de trabalho descrito acima é algo que eu executo uma dúzia de vezes por dia.
Obviamente, como eu inicio o fluxo de trabalho, eu poderia escrever um script AutoHotkey que faz tudo para mim começando com Ctrl+ Aassim:
#IfWinActive ahk_class OpusApp
F9::
Send, ^a
Send, {F9}
Sleep, 200
Send, {Down}
Send, {Enter}
return
No entanto, o exemplo acima é apenas para fins ilustrativos, e há casos em que as caixas de diálogo pop-up aparecem aleatoriamente e eu gostaria que o AutoHotkey realizasse alguma ação, dependendo do título da caixa de diálogo pop-up.
Minha pesquisa até agora
- Algumas fontes da Internet sugerem o uso de um loop AutoHotkey que faz loops e verificações indefinidamente, digamos a cada segundo, se existe uma janela com um determinado título e a fecha. Mas acho que é um desperdício de recursos da CPU
- Algumas outras fontes da Internet mencionam um gancho de shell junto com um trecho de código, e acho que esse é o caminho a seguir, mas não entendo o trecho de código; alguém poderia explicar como funciona e dar um exemplo compreensível, desde que essa fosse a solução?
O seguinte trecho de código é copiado daqui .
SetBatchLines, -1
Process, Priority,, High
Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return
ShellMessage( wParam,lParam ) {
If ( wParam = 32772 or WParam = 4) ; HSHELL_WINDOWACTIVATED := 4 or 32772
WinGetActiveTitle, Title
If ( Title = "sun 4 - foxtrot - Remote Desktop Connection" )
SetCapsLockState, on
else SetCapsLockState, off
}
eu vejo o
If (Title = "sun 4 - foxtrot - Remote Desktop Connection")
parte. O que o que todo o resto faz?
fonte