Ä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 rör sig några fönstret 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.

instagram viewer

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änd AutoHotKey för att fästa fönster "alltid överst" med ett kortkommando. Den här gången kommer vi dock att dra nytta av AutoHotKeys fönstermanipuleringsförmåga för att:

  1. "Läs" det aktiva fönstrets ID.
  2. "Läs" även dess mått (bredd & höjd).
  3. "Läs" monitorns mått.
  4. 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.
  5. 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 applicera det på Allt windows - som 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 veta mer i förväg, kolla in vår snabb 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-skript.

Ge ditt skripts fil ett namn och högerklicka sedan på den och redigera Det. 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::

Den 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 bör se ut så här:

^y::
; Detta är en kommentar.
lämna tillbaka

Den "; Det här är en kommentar." raden är just det, en kommentar i skriptets "kod" som AutoHotKey inte kommer att exekvera. 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 på 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 några fönster från några app. 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, A
WinGetPos bredd, höjd, %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 manuset 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änd 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 en med de vertikala koordinaterna där vi ska flytta fönstret för att få det att synas i mitten av skärm.

TargetX := (A_ScreenWidth/2)-(Bredd/2); Här beräknar vi horisontalen fönster mål...
TargetY := (A_ScreenHeight/2)-(Height/2); ...och här den vertikala.

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 skärmens vänstra sida och upp 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 omfattningen av den här artikeln, kontrollera 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 på nästa steg förväntar dig att du sparar manuset 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:

#NoEnv; Rekommenderas för prestanda och kompatibilitet med framtida AutoHotkey-utgåvor.
; #Varna; Aktivera varningar för att hjälpa till att upptäcka vanliga fel.
SendMode Input; Rekommenderad förny skript på grund av dess överlägsna hastighet och tillförlitlighet.
SetWorkingDir %A_ScriptDir%; Säkerställer en konsekvent startkatalog.
^y::
WinGetTitle, ActiveWindowTitle, A; Hämta det aktiva fönstret's titel för "inriktning" det/agerar på det.
WinGetPos Width, Height, %ActiveWindowTitle%; Få den aktiva fönsters position, använd för våra beräkningar.
TargetX := (A_ScreenWidth/2)-(Bredd/2); Beräkna det horisontella målet dit vi ska flytta fönster.
TargetY := (A_ScreenHeight/2)-(Höjd/2); Beräkna den vertikala placeringen av de fönster.

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%; Flytta fönster till de beräknade koordinaterna.

lämna tillbaka

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.

#NoEnv; Rekommenderas för prestanda och kompatibilitet med framtida AutoHotkey-utgåvor.
; #Varna; Aktivera varningar för att hjälpa till att upptäcka vanliga fel.
SendMode Input; Rekommenderad förny skript på grund av dess överlägsna hastighet och tillförlitlighet.
SetWorkingDir %A_ScriptDir%; Säkerställer en konsekvent startkatalog.
PositionToggle = 1; Använda sig av a siffrasom en växel för märkning som övervakar fönster ska dyka upp.
^y::
WinGetTitle, ActiveWindowTitle, A
WinGetPos bredd, höjd, %ActiveWindowTitle%

Om PositionToggle = 1; Kontrollera växelns tillstånd och "do vad står mellan de lockiga parenteserna" om det är det uppsättningtill1för vår primära monitor.
{
TargetX := (A_ScreenWidth/2)-(Width/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
PositionToggle = 2; "Snärt" växeln så att om vi återanvänder snabbtangenten kommer vårt aktiva fönster att flyttas till den andra monitorn.
}
Else If PositionToggle = 2; Har vi använt snabbtangenten tidigare, "snärta" växlingsnumret till den andra monitorn? Då ska manuset istället göra vad's mellan följande krulliga parenteser istället för de ovan.
{
SysGet, Mon2, Monitor, 2; Skaffa den andra monitorn's detaljer
Mon2Width := Mån2Höger - Mån2Vänster; Beräkna den andra monitorn's faktiska bredd.
Mån2Höjd := Mån2Bottom - Mån2Topp; Beräkna den andra monitorn's faktiska höjd.

TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth; Beräkna var du ska flytta fönstret. Observera att vi även lägger till den primära monitorn's bredd eftersom AutoHotKey kan't flytta fönster på enskilda bildskärmar men över deras kombinerade "yta".
TargetY := (Mon2Height/2)-(Höjd/2)+Mon2Top; Beräkna det optimala vertikala målet för att flytta fönstret på den andra monitorn. Som ovan, den andra skärmen's vertikala detaljer detekteras i förhållande till den primära monitorn. Därför måste vi vara kreativa för att få ett optimalt mål genom att erkänna hur den andra övervakar's topp ärn't lika med 0 (som den primära's).

PositionToggle = 1; Dra reglaget bakåt så att om vi återanvänder snabbtangenten, den fönster kommer att flytta tillbaka till den primära monitorn.
}

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%; Den faktiska handlingen, flytta den aktiva fönster till våra beräknade koordinater.

lämna tillbaka

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.

Hitta var du slösar bort din tid på Windows med AutoHotKey

Läs Nästa

Dela med sigTweetDela med sigE-post

Relaterade ämnen

  • Windows
  • Windows 10
  • Windows 11
  • AutoHotkey
  • Windows anpassning

Om författaren

Odysseas Kourafalos (31 artiklar publicerade)

OK: s verkliga liv började runt 10, när han fick sin första dator - en Commodore 128. Sedan dess har han smält nyckelkapslar genom att skriva 24/7, och försökt sprida The Word Of Tech till alla som är intresserade nog att lyssna. Eller snarare läsa.

Mer från Odysseas Kourafalos

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera