Hur du centrerar vilket fönster som helst på din skärm med AutoHotKey
Är det inte extremt irriterande hur, åtminstone på Windows, vilket fönster som helst kan dyka upp var som helst på skärmen? Går den dagliga slumpen dig på nerverna, och du föredrar att ha mer kontroll över dina fönsters placering på skärmen? Tja, nu kan du, tack vare AutoHotKey.
I den här handledningen kommer vi att se hur du kan lösa det här problemet med ett AutoHotKey-skript. Vi bygger den så att den flyttar vilket fönster som helst till mitten av skärmen med en knapptryckning. Låter sött? Låt oss se hur det går till!
Hur man ställer in en fönstercentrerad snabbtangent med AutoHotKey
Halva striden när man skapar ett manus är att komma på hur det kommer att fungera innan man ens skriver en enskild karaktär. Så låt oss göra en sådan handlingsplan på vanlig engelska att vi sedan "muterar" till ett manus.
"Problemet" med Windows
Windows (som i "rektangeln på våra skärmar", inte operativsystemet) tenderar att dyka upp var som helst på skärmen. Det är distraherande, och det kan också vara irriterande när det händer upprepade gånger. Speciellt när man har att göra med flera begäranden som dyker upp på olika ställen och förväntar sig användarinput.
Lösningen på problemet
Förutom att skicka tangenttryckningar och musklick till valfritt fönster, kan AutoHotKey också manipulera dem. Vi såg tidigare hur du kan använda AutoHotKey för att fästa fönster "alltid överst" med en kortkommando. Den här gången kommer vi dock att dra fördel av AutoHotKeys fönstermanipuleringsförmåga för att:
- "Läs" det aktiva fönstrets ID.
- "Läs" även dess mått (bredd & höjd).
- "Läs" monitorns mått.
- Kombinera monitorns och fönstrets dimensioner för att beräkna de optimala koordinaterna för att presentera nämnda fönster i skärmens mitt.
- Flytta fönstret till dessa koordinater.
Slutligen kommer vi att mappa ovanstående till en genväg. På så sätt kan du kalla det "on-demand" istället för att tillämpa det på alla fönster – vilket kan störa helskärmsappar och spel.
Observera att i den här handledningen kommer vi att dyka direkt in i AutoHotKey. Om du inte är bekant med det och vill lära dig mer i förväg, kolla vår snabba AutoHotKey-guide för nybörjare.
Först ställer du in snabbtangenten
Vi nämnde hur vi kommer att mappa funktionen vi kommer att skapa till en genväg. Men det är förmodligen bättre om vi börjar med den delen för att få det ur vägen.
Börja med att ladda ner installationsprogrammet från AutoHotKeys officiella webbplats. Välj den "nuvarande" versionen istället för v2-betan eller den föråldrade 1.0-versionen. Installera det sedan på din PC.
Starta Filutforskaren (det snabbaste sättet är med tangentkombinationen Windows-tangent + E) och flytta till sökvägen där du vill skapa ditt skript. Med AutoHotKey installerad kommer du att få några nya alternativ att visas på högerklicksmenyn. Så högerklicka på det tomma utrymmet i Filutforskarens fönster och välj Nytt > AutoHotKey Script.
Ge ditt skripts fil ett namn och högerklicka sedan på den och redigera den. Om du inte använder en kodvänlig textredigeringsapp, som Visual Studio Code eller Notepad++, använd Windows Notepad. Undvik redigerare som Wordpad, som kan lägga till värdelös (för ändamålet) syntax till din "kod".
När du är i din valfri redigerare ser du att ditt AutoHotKey-skript redan har några rader förifyllda överst. De finns där av stabilitets- och kompatibilitetsskäl. De är tweakable, men lämna dem som de är för denna handledning.
"Flytta" två eller tre rader under dem och ange genvägen som kommer att starta din funktion. Du kan skapa en tangentkombination genom att använda "+" för Shift, "^" för CTRL, "!" för Alt och "#" för Windows-tangenten, såväl som alla "normala" tangenter från tangentbordet (bokstäver och siffror).
Till exempel, för att få kombinationen CTRL + Y att starta ditt skript, använd:
^y::
Det dubbla ":" är som att säga, "hej, AutoHotKey, vänligen mappa strängen eller tangentkombinationen till vänster till allt till höger".
"Flytta" två eller tre rader under det genom att trycka på Enter och skriv "retur", vilket kommer att markera slutet på den specifika funktionen. Det fullständiga resultatet ska se ut så här:
^y::; This is a comment.return
"; Det här är en kommentar." linje är just det, en kommentar i skriptets "kod" som AutoHotKey inte kommer att köra. Det finns där i dokumentationssyfte för att markera platsen där vi anger skriptets "kod" i följande steg.
Om du har följt vår guide för att skapa appspecifika snabbtangenter med AutoHotKey tidigare, i det här fallet… gör det inte. Du vill att din fönstercentrerade snabbtangent ska vara "global" för att centrera alla fönster från vilken app som helst. Om du "knyter den" till en viss app kommer den bara att agera på den här appens fönster.
Få information om det aktiva fönstret
Vi vill att vår genväg ska agera på det aktiva fönstret, och vi behöver också dess dimensioner för våra beräkningar. Vi kan hitta dessa detaljer med följande:
WinGetTitle, ActiveWindowTitle, AWinGetPos,,, Width, Height, %ActiveWindowTitle%
Ersätt kommentarsraden som vi har lagt till i skriptet i föregående avsnitt med de två raderna ovan. Resultatet?
- Den första raden tar tag i det aktiva fönstrets titel.
- Den andra raden läser dess bredd och höjd och mappar dem till orden/variablerna "Width" och "Height", som vi kommer att använda härnäst för våra beräkningar.
Vi har det aktiva fönstrets detaljer, men vi behöver också monitorns synliga områdes mått för att nå vårt mål. Tack och lov är det ännu lättare att ta reda på dem.
Hur är det med det primära monitorområdet?
Vi behöver inga extra kommandon för att hitta vår primära bildskärms bredd och höjd. AutoHotKey kommer med två förinställda variabler som redan innehåller den informationen för oss: "A_ScreenWidth" och "A_ScreenHeight".
Så när du ser dem i nästa avsnitt "innehåller" de redan den primära monitorns bredd och höjd. Det behövs inget för att tilldela dem rätt värden. Vi kan alltså använda dem direkt i våra beräkningar.
Dags att beräkna målpositionen
Vi kan inkludera beräkningarna direkt i de punkter i skriptet där vi behöver dem. Ändå är det lättare och bättre för läsbarheten om vi mappar dem till två variabler och sedan använder dessa variabler i vårt skript.
Så låt oss gå till "TargetX" som variabeln som kommer att hålla de horisontella koordinaterna och "TargetY" som den med de vertikala koordinaterna där vi ska flytta fönstret för att det ska visas i mitten av skärmen.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Here we calculate the horizontal window target...TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.
Låt oss dechiffrera dessa rader på vanlig engelska:
- "TargetX" och "TargetY" är de två variablerna.
- ":=" informerar AutoHotKey att variablerna ska vara lika med resultaten av beräkningarna till höger och att dessa resultat ska behandlas som siffror.
- "(A_ScreenWidth/2)" delar hela bildskärmens bredd med två.
- "(Width/2)" gör samma sak för det aktiva fönstrets bredd.
Med ovanstående subtraherar vi halva det aktiva fönstrets bredd från halva skärmens bredd. Det som återstår är utrymmet till vänster om fönstret – från vänster sida av skärmen och fram till där fönstret ska visas. Den andra raden gör samma sak men för höjden.
Nu för att flytta om fönstret
Utrustade med den allsmäktiga kunskapen från de mystiska kommandon vi såg ovan, kan vi nu skapa vår magiska besvärjelse som kommer att fullborda fönsterteleporteringsritualen. Eller, på vanlig engelska, använd AutoHotKeys "WinMove"-kommando för att flytta fönster runt på skärmen.
WinMove förväntar sig att vi ska "mata" den med minst tre informationsdelar för att göra sin handling: det riktade fönstrets titel och koordinaterna vart det ska flyttas. Eftersom vi redan har mappat dessa informationsbitar till variabler är kommandot så enkelt som:
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
I ovanstående:
- "WinMove" är kommandot AutoHotKey som flyttar runt ett fönster.
- "%ActiveWindowTitle%" är variabeln där det aktiva fönstrets titel mappas.
- "%TargetX%" och "%TargetY%" är de horisontella och vertikala koordinaterna dit fönstret ska flyttas.
Du kan också ändra storlek på fönster med WinMove, hoppa över de med speciella textstickor i sina titlar eller innehåll, etc. Eftersom dessa funktioner ligger utanför ramen för denna artikel, kolla AutoHotKeys officiella dokumentation om WinMove-kommandot för mer om dem.
Det sista manuset
Äntligen når vi den mest utmanande delen av vår resa. Förbered dig för nästa steg förväntar dig att du sparar skriptet och, ja… Kör det.
Ja, det var det – manuset är komplett, och det finns inget mer att göra än att prova det. Använd genvägen du definierade så flyttas alla aktiva fönster till mitten av skärmen.
Den slutliga skriptfilen, som öppnas i en textredigerare, bör se ut ungefär så här:
; 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
Observera att du kan kopiera skriptet ovan, klistra in det i Notepad eller liknande textredigerare och spara det med en AHK-tillägg. Sedan "kör" den, med AutoHotKey installerad, för att centrera vilket fönster som helst när du trycker på CTRL + Y. Om du inte gillar den genvägen, justera "^y::"-raden till en annan tangentkombination. Till exempel !+c::skulle mappa funktionen till tangentkombinationen Shift + Alt + C.
Bonus spår
För din bekvämlighet har vi bestämt oss för att trolla och inkludera ett sekundärt skript som kommer att vara användbart för dem med dubbla bildskärmsinställningar.
För att hålla den här artikeln strömlinjeformad har vi istället inkluderat information om hur skriptet fungerar i det i form av kommentarer. Du kan ta bort dem från din iteration.
Den korta historien om hur det skiljer sig från skriptet ovan är att vi även lägger till en PositionToggle-variabel och lite "IF-logik". Vi använder sedan dem för att "snärta" fönstret mellan bildskärmar. Vi bör notera att det är en oelegant och "hack-y" lösning på problemet. Men vi föredrog det framför mer strömlinjeformad kod eftersom detta tillvägagångssätt är lättare att förstå och justera för alla som inte är bekanta med 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
Centrera ett fönster med en nyckel, det enkla sättet
Och nu är du klar! Om allt fungerar bra kan du nu använda din nyinställda snabbtangent för att centrera ett fönster när som helst.




