Come centrare qualsiasi finestra sullo schermo con AutoHotKey
Non è estremamente fastidioso come, almeno su Windows, qualsiasi finestra possa apparire in qualsiasi punto dello schermo? Quella casualità quotidiana ti dà sui nervi e preferiresti avere un maggiore controllo sul posizionamento sullo schermo delle tue finestre? Bene, ora puoi, grazie ad AutoHotKey.
In questo tutorial, vedremo come risolvere questo problema con uno script AutoHotKey. Lo costruiremo in modo che sposti qualsiasi finestra al centro dello schermo premendo un tasto. Suona dolce? Vediamo come si fa!
Come impostare un tasto di scelta rapida per centrare le finestre con AutoHotKey
Metà della battaglia durante la creazione di una sceneggiatura sta nel capire come funzionerà prima ancora di digitare un singolo personaggio. Quindi, creiamo un tale piano d’azione in un inglese semplice che poi "muteremo" in un copione.
Il "problema" di Windows
Windows (come in "le cose rettangolari sui nostri schermi", non il sistema operativo) tendono a comparire in qualsiasi punto dello schermo. È fonte di distrazione e può anche essere fastidioso quando accade ripetutamente. Soprattutto quando si ha a che fare con più richiedenti che spuntano in punti diversi, aspettandosi l’input dell’utente.
La soluzione al problema
Oltre a inviare sequenze di tasti e clic del mouse a qualsiasi finestra, AutoHotKey può anche manipolarli. Abbiamo visto in passato come utilizzare AutoHotKey per bloccare Windows "sempre in primo piano" utilizzando una scorciatoia da tastiera. Questa volta, tuttavia, sfrutteremo le capacità di manipolazione della finestra di AutoHotKey per:
- "Leggi" l’ID della finestra attiva.
- Anche "leggere" le sue dimensioni (larghezza e altezza).
- "Leggi" le dimensioni del monitor.
- Combina le dimensioni del monitor e della finestra per calcolare le coordinate ottimali per presentare detta finestra al centro dello schermo.
- Sposta la finestra su quelle coordinate.
Infine, mapperemo quanto sopra a una scorciatoia. In questo modo, puoi chiamarlo "on-demand" invece di applicarlo su tutte le finestre, il che potrebbe interferire con app e giochi a schermo intero.
Nota che in questo tutorial ci tufferemo direttamente in AutoHotKey. Se non hai familiarità con esso e vuoi saperne di più in anticipo, consulta la nostra guida rapida AutoHotKey per principianti.
Innanzitutto, configurare il tasto di scelta rapida
Abbiamo menzionato come mapperemo la funzione che creeremo su una scorciatoia. Tuttavia, probabilmente è meglio se iniziamo con quella parte per toglierlo di mezzo.
Inizia scaricando il programma di installazione dal sito ufficiale di AutoHotKey. Scegli la versione "corrente" anziché la versione beta v2 o la versione 1.0 deprecata. Quindi, installalo sul tuo PC.
Avvia Esplora file (il modo più rapido è con la combinazione di tasti Windows + E) e spostati nel percorso in cui desideri creare lo script. Con AutoHotKey installato, vedrai alcune nuove opzioni visualizzate nel menu di scelta rapida. Quindi, fai clic con il pulsante destro del mouse sullo spazio vuoto della finestra di Esplora file e scegli Nuovo> Script AutoHotKey.
Assegna un nome al file dello script, quindi fai clic con il pulsante destro del mouse su di esso e modificalo. Se non usi un’app di modifica del testo compatibile con il codice, come Visual Studio Code o Notepad++, usa Blocco note di Windows. Evita editor come Wordpad, che potrebbero aggiungere una sintassi inutile (per lo scopo) al tuo "codice".
Quando sei nel tuo editor di scelta, vedrai che il tuo script AutoHotKey ha già alcune righe precompilate nella parte superiore. Sono lì per motivi di stabilità e compatibilità. Sono modificabili, ma lasciali come sono per questo tutorial.
"Sposta" due o tre righe sotto di esse e inserisci la scorciatoia che avvierà la tua funzione. Puoi creare una combinazione di tasti usando "+" per Maiusc, "^" per CTRL, "!" per Alt e "#" per il tasto Windows, nonché qualsiasi tasto "normale" della tastiera (lettere e numeri).
Ad esempio, per fare in modo che la combinazione CTRL + Y avvii il tuo script, usa:
^y::
Il doppio ":" è come dire "ehi, AutoHotKey, per favore mappa la stringa o la combinazione di tasti a sinistra su tutto a destra".
"Sposta" due o tre righe sotto premendo Invio e digita "ritorno", che segnerà la fine della particolare funzione. Il risultato completo dovrebbe essere simile al seguente:
^y::; This is a comment.return
Il "; Questo è un commento." la riga è esattamente quella, un commento nel "codice" dello script che AutoHotKey non eseguirà. È lì per scopi di documentazione per contrassegnare il punto in cui inseriremo il "codice" dello script nei passaggi seguenti.
Se in passato hai seguito la nostra guida sulla creazione di tasti di scelta rapida specifici per app con AutoHotKey, in questo caso… non farlo. Vuoi che il tuo tasto di scelta rapida per centrare la finestra sia "globale" per centrare qualsiasi finestra da qualsiasi app. Se lo "leghi" a un’app particolare, agirà solo sulle finestre di questa app.
Ottieni i dettagli della finestra attiva
Vogliamo che la nostra scorciatoia agisca sulla finestra attiva e abbiamo anche bisogno delle sue dimensioni per i nostri calcoli. Possiamo trovare quei dettagli con quanto segue:
WinGetTitle, ActiveWindowTitle, AWinGetPos,,, Width, Height, %ActiveWindowTitle%
Sostituisci la riga di commento che abbiamo aggiunto allo script nella sezione precedente con le due righe sopra. Il risultato?
- La prima riga prende il titolo della finestra attiva.
- La seconda riga ne legge la larghezza e l’altezza e le mappa alle parole/variabili "Larghezza" e "Altezza", che useremo in seguito per i nostri calcoli.
Abbiamo i dettagli della finestra attiva, ma abbiamo anche bisogno delle dimensioni dell’area visibile del monitor per raggiungere il nostro obiettivo. Per fortuna, scoprirli è ancora più facile.
Che dire dell’area monitor principale?
Non abbiamo bisogno di comandi aggiuntivi per trovare la larghezza e l’altezza del nostro monitor principale. AutoHotKey viene fornito con due variabili preimpostate che contengono già tali informazioni per noi: "A_ScreenWidth" e "A_ScreenHeight".
Quindi, quando li vedi nella sezione successiva, "contengono" già la larghezza e l’altezza del monitor principale. Non è necessario assegnare loro i valori corretti. Pertanto, possiamo usarli direttamente nei nostri calcoli.
Tempo per calcolare la posizione target
Possiamo includere i calcoli direttamente nei punti dello script dove ne abbiamo bisogno. Tuttavia, è più facile e migliore per la leggibilità se le mappiamo a due variabili e quindi le usiamo nel nostro script.
Quindi, andiamo per "TargetX" come variabile che conterrà le coordinate orizzontali e "TargetY" come quella con le coordinate verticali in cui dovremmo spostare la finestra per farla apparire al centro dello schermo.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Here we calculate the horizontal window target...TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.
Decifriamo quelle righe in un inglese semplice:
- "TargetX" e "TargetY" sono le due variabili.
- ":=" informa AutoHotKey che le variabili devono essere uguali ai risultati dei calcoli a destra e che tali risultati devono essere trattati come numeri.
- "(A_ScreenWidth/2)" divide l’intera larghezza del monitor per due.
- "(Width/2)" fa lo stesso per la larghezza della finestra attiva.
Con quanto sopra, sottraiamo metà della larghezza della finestra attiva dalla metà della larghezza dello schermo. Quello che resta è lo spazio a sinistra della finestra, dal lato sinistro dello schermo fino al punto in cui dovrebbe apparire la finestra. La seconda riga fa lo stesso ma per l’altezza.
Ora per riposizionare la finestra
Dotati dell’onnipotente conoscenza acquisita dai comandi mistici che abbiamo visto sopra, ora possiamo creare il nostro incantesimo magico che completerà il rituale di teletrasporto della finestra. Oppure, in parole povere, usa il comando "WinMove" di AutoHotKey per spostare le finestre sullo schermo.
WinMove si aspetta che lo "alimentiamo" con almeno tre informazioni per compiere il suo compito: il titolo della finestra di destinazione e le coordinate su cui spostarla. Dal momento che abbiamo già mappato queste informazioni sulle variabili, il comando è semplice come:
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
In quanto sopra:
- "WinMove" è il comando AutoHotKey che sposta una finestra in giro.
- "%ActiveWindowTitle%" è la variabile in cui è mappato il titolo della finestra attiva.
- "%TargetX%" e "%TargetY%" sono le coordinate orizzontali e verticali dove spostare la finestra.
Puoi anche ridimensionare le finestre con WinMove, saltare quelle con particolari punti di testo nei loro titoli o contenuti, ecc. Poiché queste funzionalità non rientrano nell’ambito di questo articolo, controlla la documentazione ufficiale di AutoHotKey sul comando WinMove per ulteriori informazioni su di esse.
La sceneggiatura finale
Infine, raggiungiamo la parte più impegnativa del nostro viaggio. Preparati per il passaggio successivo, in attesa che tu salvi lo script e, beh… Eseguilo.
Sì, è così: lo script è completo e non c’è altro da fare che provarlo. Usa il collegamento che hai definito e qualsiasi finestra attiva si sposterà al centro dello schermo.
Il file di script finale, come aperto in un editor di testo, dovrebbe assomigliare a questo:
; SendMode Input ; Recommended for new scripts due to its superior speed and reliability.SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.^y:: WinGetTitle, ActiveWindowTitle, A ; Get the active window's title for "targetting" it/acting on it. WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Get the active window's position, used for our calculations. TargetX := (A_ScreenWidth/2)-(Width/2) ; Calculate the horizontal target where we'll move the window. TargetY := (A_ScreenHeight/2)-(Height/2) ; Calculate the vertical placement of the window. WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Move the window to the calculated coordinates. return
Nota che puoi copiare lo script sopra, incollarlo nel Blocco note o in un editor di testo simile e salvarlo con un’estensione AHK. Quindi, "eseguilo", con AutoHotKey installato, per centrare qualsiasi finestra ogni volta che premi CTRL + Y. Se non ti piace quella scorciatoia, modifica la riga "^y::" con una combinazione di tasti diversa. Ad esempio, !+c::associa la funzione alla combinazione di tasti Maiusc + Alt + C.
Traccia bonus
Per tua comodità, abbiamo deciso di evocare e includere uno script secondario che sarà utile a chi ha configurazioni a doppio monitor.
Per mantenere questo articolo snello, abbiamo invece incluso informazioni su come funziona lo script al suo interno sotto forma di commenti. Puoi rimuoverli dalla tua iterazione.
La breve storia di come differisce dallo script sopra è che aggiungiamo anche una variabile PositionToggle e un po’ di "logica IF". Quindi li usiamo per "scorrere" la finestra tra i monitor. Dovremmo notare che è una soluzione inelegante e "hack-y" al problema. Tuttavia, lo abbiamo preferito a un codice più snello poiché questo approccio è più facile da comprendere e modificare per tutti coloro che non hanno familiarità con AutoHotKey.
; SendMode Input ; Recommended for new scripts due to its superior speed and reliability.SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.PositionToggle = 1 ; Use a number as a toggle for marking on which monitor the window should appear.^y:: WinGetTitle, ActiveWindowTitle, A WinGetPos,,, Width, Height, %ActiveWindowTitle% If PositionToggle = 1 ; Check the toggle's state and "do what's between the curly brackets" if it's set to 1 for our primary monitor. { TargetX := (A_ScreenWidth/2)-(Width/2) TargetY := (A_ScreenHeight/2)-(Height/2) PositionToggle = 2 ; "Flick" the toggle so that if we reuse the hotkey, our active window will move to the second monitor. } Else If PositionToggle = 2 ; Have we used the hotkey before, "flicking" the toggle number to the second monitor? Then the script should instead do what's between the following curly brackets instead of the ones above. { SysGet, Mon2, Monitor, 2 ; Get the second monitor's details Mon2Width := Mon2Right - Mon2Left ; Calculate the second monitor's actual width. Mon2Height := Mon2Bottom - Mon2Top ; Calculate the second monitor's actual height. TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth ; Calculate where to move the window. Notice that we also add the primary monitor's width since AutoHotKey can't move windows on individual monitors but across their combined "surface". TargetY := (Mon2Height/2)-(Height/2)+Mon2Top ; Calculate the optimal vertical target for moving the window on the second monitor. Like above, the second monitor's vertical details are detected in relation to the primary monitor. Thus, we have to get creative to get an optimal target by acknowledging how the second monitor's top isn't equal to 0 (like the primary one's). PositionToggle = 1 ; Flick the toggle back so that if we reuse the hotkey, the window will move back to the primary monitor. } WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; The actual action, moving the active window to our calculated coordinates. return
Centrare una finestra con una chiave, il modo più semplice
E ora hai finito! Se tutto funziona bene, ora puoi utilizzare il tasto di scelta rapida appena impostato per centrare una finestra in qualsiasi momento.




