Meu entendimento de como o Windows Activation funciona é bem simples. Ele restaura a janela de uso mais recente desse tipo. Esse comportamento padrão faz com que codificar o que você quer seja muito simples. Na verdade, faço algo quase idêntico ao que você está procurando com dois blocos de código simples.
+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return
Eu criei uma sinergia interessante para trabalhar com vários monitores. Observe que, no Windows 7, manter pressionada a tecla shift + windows e usar as setas para navegar para a esquerda e para a direita moverá a janela ativa entre os monitores na velocidade da luz. Então eu tentei algo um pouco inteligente e mapeou a palavra para mudar + janela + w. Ele restaura a palavra se já estiver aberto ou executa uma nova instância, se não estiver. A beleza da abordagem é que eu nunca abandone a tecla shift + windows. Ao fazer isso, posso ativar / iniciar a palavra e movê-la exatamente para a posição desejada, usando as teclas de seta para a esquerda à esquerda (o número máximo será maximizado). Mapear + # r para restaurar a janela ativa e você controla completamente todas as janelas que você usa normalmente sem o mouse. Tudo o que você precisa lembrar é a primeira letra do aplicativo que está tentando ativar.
Em resposta à sua consulta sobre como tornar o script mais genérico:
1) Considere o uso de
; Allows you to search for an approximate window title match
SetTitleMatchMode, 2
; For example, you could do the following to activate any existing window with
; "- Microsoft Word" as part of the title
WinWait, - Microsoft Word,
IfWinNotActive, - Microsoft Word, , WinActivate, - Microsoft Word,
WinWaitActive, - Microsoft Word,
; some other code here once you have the window active
Ou outra possibilidade:
;Active the window by finding its ahk_class
WinWait, ahk_class OpusApp,
IfWinNotActive, ahk_class OpusApp, , WinActivate, ahk_class OpusApp,
WinWaitActive, ahk_class OpusApp,
Nota: O código acima foi apenas uma adaptação da saída genérica do autoscriptwriter. É um pouco redundante, mas eficaz. Para encontrar algo como ahk_class de uma janela, considere usar o espião da janela AutoIt3.
Se você precisar descobrir o título de uma janela, poderá obter o título ativo, conforme mostrado no arquivo de ajuda do exemplo do ahk
WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".
Outro truque que você pode usar é definir o título ativo usando o WinSetTitle
Edit: Dado que você tem várias instâncias de excel / word / powerpoint por aí, considere também resolver esse problema com a edição gratuita do officetabs. Ele permitirá que você mantenha todos os arquivos abertos do Excel em uma única instância, por exemplo, em vez de se espalhar pela barra de tarefas.