Meu entendimento de como a Ativação de Janelas funciona é bastante simples. Restaura a janela de uso mais recente desse tipo. Esse comportamento padrão simplifica a codificação do que você deseja. Na verdade, faço algo quase idêntico ao que você procura com dois blocos de código simples.
+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return
Criei uma sinergia interessante para trabalhar com vários monitores. Observe que no Windows 7, pressionar 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, tentei algo um pouco inteligente e mapeei a palavra para shift + window + w. Restaura a palavra se já estiver aberta ou executa uma nova instância, se não estiver. A beleza da abordagem é que eu nunca larguei a tecla shift + windows key. Ao fazer isso, posso ativar / iniciar a palavra e movê-la para exatamente a posição desejada, usando as teclas de seta para a esquerda (a seta para cima é maximizada pelo caminho e a parte de baixo é minimizada). Mapeie + # r para restaurar a janela ativa e você controla completamente todas as janelas que você normalmente usa sem esforço, sem o mouse. Tudo o que você deve se lembrar é a primeira letra do aplicativo que você está tentando ativar.
Em resposta à sua pergunta sobre como tornar o script mais genérico:
1) Considere usar
; 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 gravador automático. É um pouco redundante, mas eficaz. Para encontrar algo como o ahk_class de uma janela, considere usar o espião de janelas AutoIt3.
Se você precisar descobrir o título de uma janela, poderá obter um título ativo, conforme mostrado no arquivo de ajuda do exemplo 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 do excel / word / powerpoint flutuando, considere também resolver esse problema com a edição gratuita do officetabs. Isso permitirá que você mantenha todos os arquivos do Excel abertos em uma única instância, por exemplo, em vez de espalhar a barra de tarefas.