La mia comprensione di come funziona Window Activation è piuttosto semplice. Ripristina la finestra di utilizzo più recente di quel tipo. Questo comportamento predefinito rende molto semplice la codifica di ciò che desideri. In effetti, faccio qualcosa di quasi identico a quello che stai cercando con due semplici blocchi di codice.
+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return
Ho creato un'interessante sinergia per lavorare con più monitor. Si noti che su Windows 7, tenendo premuto MAIUSC + tasto Windows e utilizzando le frecce per spostarsi a sinistra e a destra, la finestra attiva verrà spostata tra i monitor alla velocità della luce. Quindi ho provato qualcosa di un po 'intelligente e mappato parola per spostare + finestra + w. Ripristina word se è già aperto o esegue una nuova istanza in caso contrario. La bellezza dell'approccio è che non ho mai lasciato andare maiusc + tasto windows. In questo modo posso sia attivare / avviare la parola che spostarla esattamente nella posizione desiderata usando i tasti freccia destra sinistra (su aumenterà al massimo e in basso minimizzerà). Mappa + # r per ripristinare la finestra attiva e controlli completamente tutte le finestre che normalmente usi senza sforzo senza il mouse. Tutto quello che devi ricordare è la prima lettera dell'app che stai cercando di attivare.
In risposta alla tua domanda su come rendere lo script più generico:
1) Prendi in considerazione l'utilizzo
; 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
O un'altra 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,
Nota: il codice sopra era solo un adattamento dell'output generico dello scrittore automatico. È in qualche modo ridondante ma efficace. Per trovare qualcosa come ahk_class di una finestra, considera l'utilizzo della spia della finestra di AutoIt3.
Se è necessario scoprire il titolo di una finestra, è possibile ottenere il titolo attivo come mostrato nel file della guida di esempio ahk
WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".
Un altro trucco che puoi usare è impostare il titolo attivo usando WinSetTitle
Modifica: dato che hai più istanze di excel / word / powerpoint che fluttuano intorno, considera anche di risolvere quel problema con l'edizione gratuita di officetabs. Ti permetterà di mantenere tutti i file Excel aperti in una singola istanza, ad esempio invece di sparpagliati sulla barra delle applicazioni.