Ma compréhension du fonctionnement de l'activation de la fenêtre est assez simple. Il restaure la dernière fenêtre d'utilisation de ce type. Ce comportement par défaut rend le codage de ce que vous voulez très simple. En fait, je fais quelque chose de presque identique à ce que vous recherchez avec deux blocs de code simples.
+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return
J'ai créé une synergie intéressante pour travailler avec plusieurs moniteurs. Notez que sur Windows 7, en maintenant la touche Maj + Windows enfoncée et en utilisant les flèches pour naviguer vers la gauche et la droite, la fenêtre active entre les moniteurs se déplace à la vitesse de la lumière. J'ai donc essayé quelque chose d'un mot un peu intelligent et mappé pour déplacer + fenêtre + w. Il restaure le mot s'il est déjà ouvert ou exécute une nouvelle instance sinon. La beauté de l'approche est que je n'ai jamais lâché la touche Maj + Windows. Ce faisant, je peux à la fois activer / démarrer le mot et le déplacer exactement à la position que je veux en utilisant les touches fléchées gauche droite (le haut sera maximisé par le chemin et le bas minimisera). Map + # r pour restaurer la fenêtre active et vous contrôlez complètement toutes les fenêtres que vous utilisez normalement sans effort sans la souris. Tout ce dont vous devez vous souvenir est la première lettre de l'application que vous essayez d'activer.
En réponse à votre question sur la façon de rendre le script plus générique:
1) Pensez à utiliser
; 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 une autre possibilité:
;Active the window by finding its ahk_class
WinWait, ahk_class OpusApp,
IfWinNotActive, ahk_class OpusApp, , WinActivate, ahk_class OpusApp,
WinWaitActive, ahk_class OpusApp,
Remarque: Le code ci-dessus n'était qu'une adaptation de la sortie générique du scripteur automatique. C'est quelque peu redondant mais efficace. Pour trouver quelque chose comme ahk_class d'une fenêtre, envisagez d'utiliser l'espion de fenêtre AutoIt3.
Si vous avez besoin de découvrir le titre d'une fenêtre, vous pouvez obtenir le titre actif comme indiqué dans l'exemple de fichier d'aide ahk
WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".
Une autre astuce que vous pouvez utiliser consiste à définir le titre actif à l'aide de WinSetTitle
Modifier: Étant donné que vous avez plusieurs instances d'Excel / Word / Powerpoint flottant, envisagez également de résoudre ce problème avec l'édition gratuite d'Officetabs. Il vous permettra de conserver tous les fichiers Excel ouverts dans une seule instance par exemple au lieu de vous éparpiller dans la barre des tâches.