Mi comprensión de cómo funciona la activación de Windows es bastante simple. Restaura la ventana de uso más reciente de ese tipo. Ese comportamiento predeterminado hace que la codificación de lo que quieres sea muy simple. De hecho, hago algo casi idéntico a lo que buscas con dos bloques de código simples.
+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return
Creé un poco de una sinergia interesante para trabajar con múltiples monitores. Tenga en cuenta que en Windows 7, si mantiene presionada la tecla Mayús + Windows y usa las flechas para navegar hacia la izquierda y hacia la derecha, la ventana activa se moverá entre los monitores a la velocidad de la luz. Así que probé algo un poco inteligente y asigné palabras a shift + window + w. Restaura la palabra si ya está abierta o ejecuta una nueva instancia si no. La belleza del enfoque es que nunca dejo ir la tecla Mayús + Windows. Al hacerlo, puedo activar / desactivar la palabra y moverla exactamente a la posición que quiero usando las teclas de flecha izquierda derecha (arriba se maximizará por cierto y abajo se minimizará). Map + # r para restaurar la ventana activa y controlar completamente todas las ventanas que normalmente usa sin esfuerzo sin el mouse. Todo lo que debe recordar es la primera letra de la aplicación que está intentando activar.
En respuesta a su consulta sobre cómo hacer que el script sea más 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
U otra posibilidad:
;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: El código anterior fue solo una adaptación de la salida genérica del autoescritor. Es algo redundante pero efectivo. Para encontrar algo como ahk_class de una ventana, considere usar el espía de ventana AutoIt3.
Si necesita descubrir el título de una ventana, puede obtener el título activo como se muestra en el archivo de ayuda de ejemplo ahk
WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".
Otro truco que puede usar es establecer el título activo usando WinSetTitle
Editar: dado que tiene varias instancias de excel / word / powerpoint flotando, también considere resolver ese problema con la edición gratuita de officetabs. Le permitirá mantener todos los archivos de Excel abiertos en una sola instancia, por ejemplo, en lugar de esparcir la barra de tareas.