Is het niet uiterst irritant hoe, in ieder geval in Windows, elk venster overal op het scherm kan verschijnen? Werkt die dagelijkse willekeur op uw zenuwen en heeft u liever meer controle over de plaatsing van uw vensters op het scherm? Welnu, dat kan nu, dankzij AutoHotKey.

In deze zelfstudie zullen we zien hoe u dit probleem kunt oplossen met een AutoHotKey-script. We zullen het zo bouwen dat het beweegt ieder venster met een druk op de knop naar het midden van uw scherm. Klinkt lief? Laten we eens kijken hoe het gedaan is!

Een venstercentrerende sneltoets instellen met AutoHotKey

De helft van de strijd bij het maken van een script is bedenken hoe het zal werken voordat zelfs maar een enkel teken is getypt. Dus laten we zo'n actieplan maken in gewoon Engels dat we dan "muteren" in een script.

Het "probleem" dat Windows heeft

Windows (zoals in "de rechthoekige dingetjes op onze schermen", niet het besturingssysteem) hebben de neiging om overal op het scherm te verschijnen. Het leidt af en het kan ook vervelend zijn als het herhaaldelijk gebeurt. Vooral als het gaat om meerdere aanvragers die op verschillende plekken verschijnen en gebruikersinvoer verwachten.

instagram viewer

De oplossing voor het probleem

Afgezien van het verzenden van toetsaanslagen en muisklikken naar elk venster, kan AutoHotKey ze ook manipuleren. We hebben in het verleden gezien hoe je dat kunt gebruik AutoHotKey om vensters "altijd bovenaan" vast te zetten met een sneltoets. Deze keer zullen we echter profiteren van de venstermanipulatiemogelijkheden van AutoHotKey om:

  1. "Lees" de ID van het actieve venster.
  2. "Lees" ook de afmetingen (breedte & hoogte).
  3. "Lees" de afmetingen van de monitor.
  4. Combineer de afmetingen van de monitor en het venster om de optimale coördinaten te berekenen voor de presentatie van het venster in het midden van het scherm.
  5. Verplaats het venster naar die coördinaten.

Ten slotte zullen we het bovenstaande toewijzen aan een snelkoppeling. Op deze manier kun je het "on-demand" noemen in plaats van het toe te passen op alle windows - wat kan interfereren met apps en games op volledig scherm.

Merk op dat we in deze zelfstudie rechtstreeks in AutoHotKey duiken. Als je er niet bekend mee bent en van tevoren meer wilt weten, kijk dan op onze snelle AutoHotKey-gids voor beginners.

Eerst de sneltoets instellen

We hebben vermeld hoe we de functie die we gaan maken, toewijzen aan een snelkoppeling. Het is echter waarschijnlijk beter als we met dat deel beginnen om het uit de weg te ruimen.

Begin met het downloaden van het installatieprogramma van De officiële site van AutoHotKey. Ga voor de "huidige" versie in plaats van de v2-bèta of de verouderde 1.0-versie. Installeer het vervolgens op uw pc.

Start de bestandsverkenner (de snelste manier is met de Windows-toets + E-toetscombinatie) en ga naar het pad waar u uw script wilt maken. Als AutoHotKey is geïnstalleerd, verschijnen er enkele nieuwe opties in het snelmenu. Dus, klik met de rechtermuisknop op de lege ruimte van het venster van de Verkenner en kies Nieuw > AutoHotKey-script.

Geef het bestand van je script een naam, klik er met de rechtermuisknop op en Bewerk het. Als u geen codevriendelijke tekstbewerkingsapp gebruikt, zoals Visual Studio Code of Notepad++, gebruik dan Windows Kladblok. Vermijd editors zoals Wordpad, die nutteloze (voor dit doel) syntaxis aan uw "code" kunnen toevoegen.

Wanneer je in je editor naar keuze bent, zul je zien dat je AutoHotKey-script al enkele regels bovenaan heeft ingevuld. Ze zijn er om redenen van stabiliteit en compatibiliteit. Ze zijn aanpasbaar, maar laat ze zoals ze zijn voor deze tutorial.

"Verplaats" twee of drie regels eronder en voer de snelkoppeling in die uw functie start. U kunt een toetscombinatie maken door "+" te gebruiken voor Shift, "^" voor CTRL, "!" voor Alt, en "#" voor de Windows-toets, evenals elke "normale" toets van het toetsenbord (letters en cijfers).

Om bijvoorbeeld de combinatie CTRL + Y uw script te laten starten, gebruikt u:

^j::

De dubbele ":" is hetzelfde als zeggen: "Hé, AutoHotKey, wijs de tekenreeks of toetsencombinatie aan de linkerkant toe aan alles aan de rechterkant".

"Verplaats" twee of drie regels daaronder door op Enter te drukken en typ "return", wat het einde van de specifieke functie markeert. Het volledige resultaat zou er als volgt uit moeten zien:

^j::
; Deze is een reactie.
opbrengst

De "; Dit is een opmerking." regel is precies dat, een opmerking in de "code" van het script die AutoHotKey niet zal uitvoeren. Het is daar voor documentatiedoeleinden om de plek te markeren waar we de "code" van het script in de volgende stappen zullen invoeren.

Als je onze gids hebt gevolgd op app-specifieke sneltoetsen maken met AutoHotKey vroeger, in dit geval... niet doen. U wilt dat uw sneltoets voor het centreren van vensters "algemeen" is om te centreren ieder raam van ieder app. Als je het aan een bepaalde app koppelt, werkt het alleen op de vensters van deze app.

De details van het actieve venster ophalen

We willen dat onze snelkoppeling werkt op het actieve venster en we hebben ook de afmetingen nodig voor onze berekeningen. We kunnen die details vinden met het volgende:

WinGetTitle, ActiveWindowTitle, A
WinGetPos Breedte, Hoogte, %ActiveWindowTitle%

Vervang de commentaarregel die we in het vorige gedeelte aan het script hebben toegevoegd door de twee regels hierboven. Het resultaat?

  • De eerste regel pakt de titel van het actieve venster.
  • De tweede regel leest de breedte en hoogte en wijst deze toe aan de woorden/variabelen "Breedte" en "Hoogte", die we hierna zullen gebruiken voor onze berekeningen.

We hebben de details van het actieve venster, maar we hebben ook de afmetingen van het zichtbare gebied van de monitor nodig om ons doel te bereiken. Gelukkig is het nog gemakkelijker om die te achterhalen.

Hoe zit het met het primaire monitorgebied?

We hebben geen extra opdrachten nodig om de breedte en hoogte van onze primaire monitor te vinden. AutoHotKey wordt geleverd met twee vooraf ingestelde variabelen die die informatie al voor ons bevatten: "A_ScreenWidth" en "A_ScreenHeight".

Dus als je ze in de volgende sectie ziet, "bevatten" ze al de breedte en hoogte van de primaire monitor. Er is niets nodig om de juiste waarden aan hen toe te kennen. We kunnen ze dus direct in onze berekeningen gebruiken.

Tijd om de doelpositie te berekenen

We kunnen de berekeningen direct in de punten van het script opnemen waar we ze nodig hebben. Toch is het voor de leesbaarheid gemakkelijker en beter als we ze toewijzen aan twee variabelen en dan gebruik die variabelen in ons script.

Laten we dus gaan voor "TargetX" als de variabele die de horizontale coördinaten bevat en "TargetY" als de een met de verticale coördinaten waar we het venster moeten verplaatsen om het in het midden van de te laten verschijnen scherm.

TargetX := (A_ScreenWidth/2)-(Breedte/2); Hier berekenen we de horizontale raam doel...
TargetY := (A_ScreenHeight/2)-(Hoogte/2); ...en hier de verticale.

Laten we die regels in gewoon Engels ontcijferen:

  • "TargetX" en "TargetY" zijn de twee variabelen.
  • ":=" informeert AutoHotKey dat de variabelen gelijk moeten zijn aan de resultaten van de berekeningen aan de rechterkant, en dat die resultaten als getallen moeten worden behandeld.
  • "(A_ScreenWidth/2)" deelt de breedte van de volledige monitor door twee.
  • "(Breedte/2)" doet hetzelfde voor de breedte van het actieve venster.

Met het bovenstaande trekken we de helft van de breedte van het actieve venster af van de helft van de schermbreedte. Wat overblijft is de ruimte links van het venster - vanaf de linkerkant van het scherm tot waar het venster zou moeten verschijnen. De tweede regel doet hetzelfde, maar dan voor de hoogte.

Nu het venster verplaatsen

Uitgerust met de almachtige kennis die we hebben verkregen van de mystieke commando's die we hierboven zagen, kunnen we nu onze magische bezwering maken die het raamteleportatieritueel zal voltooien. Of, in gewoon Engels, gebruik de "WinMove"-opdracht van AutoHotKey om vensters over het scherm te verplaatsen.

WinMove verwacht dat we het "voeden" met ten minste drie stukjes informatie om zijn werk te doen: de titel van het beoogde venster en de coördinaten waar het moet worden verplaatst. Omdat we die stukjes informatie al aan variabelen hebben toegewezen, is de opdracht zo eenvoudig als:

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%

In bovenstaande:

  • "WinMove" is de AutoHotKey-opdracht waarmee een venster wordt verplaatst.
  • "%ActiveWindowTitle%" is de variabele waaraan de titel van het actieve venster wordt toegewezen.
  • "%TargetX%" en "%TargetY%" zijn de horizontale en verticale coördinaten waar het venster moet worden verplaatst.

U kunt ook het formaat van vensters wijzigen met WinMove, die met bepaalde tekststekens in hun titels of inhoud overslaan, enz. Aangezien deze functies buiten het bestek van dit artikel vallen, controleert u: Officiële documentatie van AutoHotKey over het WinMove-commando voor meer over hen.

Het definitieve script

Eindelijk bereiken we het meest uitdagende deel van onze reis. Zet je schrap voor de volgende stap die verwacht dat je het script opslaat en, nou ja... Voer het uit.

Ja, dat was het - het script is compleet en er zit niets anders op dan het uit te proberen. Gebruik de snelkoppeling die u hebt gedefinieerd en elk actief venster wordt naar het midden van uw scherm verplaatst.

Het uiteindelijke scriptbestand, zoals geopend in een teksteditor, zou er ongeveer zo uit moeten zien:

#NoEnv; Aanbevolen voor prestaties en compatibiliteit met toekomstige AutoHotkey-releases.
; #Waarschuwen; Schakel waarschuwingen in om te helpen bij het opsporen van veelvoorkomende fouten.
SendMode-invoer; Aanbevolen voornieuwe scripts vanwege de superieure snelheid en betrouwbaarheid.
SetWorkingDir %A_ScriptDir%; Zorgt voor een consistente startdirectory.
^j::
WinGetTitle, ActiveWindowTitle, A; Het actieve venster ophalen's titel voor "targeting" het/er naar handelen.
WinGetPos Breedte, Hoogte, %ActiveWindowTitle%; Krijg de actieve raam's positie, gebruikt voor onze berekeningen.
TargetX := (A_ScreenWidth/2)-(Breedte/2); Bereken het horizontale doel waar we de. naartoe verplaatsen raam.
TargetY := (A_ScreenHeight/2)-(Hoogte/2); Bereken de verticale plaatsing van de raam.

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%; Verplaats de raam naar de berekende coördinaten.

opbrengst

Merk op dat u het bovenstaande script kunt kopiëren, in Kladblok of een vergelijkbare teksteditor kunt plakken en opslaan met een AHK-extensie. Voer het vervolgens uit, met AutoHotKey geïnstalleerd, om elk venster te centreren wanneer u op CTRL + Y drukt. Als je die sneltoets niet leuk vindt, pas je de regel "^y::" aan naar een andere toetsencombinatie. Bijvoorbeeld, !+c:: zou de functie toewijzen aan de toetscombinatie Shift + Alt + C.

Bonustrack

Voor uw gemak hebben we besloten om een ​​secundair script op te roepen en op te nemen dat handig zal zijn voor mensen met een opstelling met twee monitoren.

Om dit artikel gestroomlijnd te houden, hebben we in plaats daarvan informatie opgenomen over hoe het script erin werkt in de vorm van opmerkingen. U kunt ze uit uw iteratie verwijderen.

Het korte verhaal van hoe het verschilt van het bovenstaande script, is dat we ook een PositionToggle-variabele en wat "IF-logica" toevoegen. Die gebruiken we dan om het venster tussen monitoren te "flicken". We moeten er rekening mee houden dat het een onelegante en "hack-y" oplossing voor het probleem is. We gaven er echter de voorkeur aan boven meer gestroomlijnde code, omdat deze aanpak gemakkelijker te begrijpen en aan te passen is voor iedereen die niet bekend is met AutoHotKey.

#NoEnv; Aanbevolen voor prestaties en compatibiliteit met toekomstige AutoHotkey-releases.
; #Waarschuwen; Schakel waarschuwingen in om te helpen bij het opsporen van veelvoorkomende fouten.
SendMode-invoer; Aanbevolen voornieuwe scripts vanwege de superieure snelheid en betrouwbaarheid.
SetWorkingDir %A_ScriptDir%; Zorgt voor een consistente startdirectory.
PositieToggle = 1; Gebruik a nummerals een schakelaar voor markeren Aan die toezicht houden op de raam zou moeten verschijnen.
^j::
WinGetTitle, ActiveWindowTitle, A
WinGetPos Breedte, Hoogte, %ActiveWindowTitle%

Als PositieToggle = 1; Controleren de staat van de schakelaar en "doen wat staat tussen de accolades" als dat zo is? settot1voor onze primaire monitor.
{
TargetX := (A_ScreenWidth/2)-(Breedte/2)
TargetY := (A_ScreenHeight/2)-(Hoogte/2)
PositieToggle = 2; "Flick" de schakelaar zodat als we de sneltoets opnieuw gebruiken, ons actieve venster naar de tweede monitor wordt verplaatst.
}
Anders Als PositieToggle = 2; Hebben we de sneltoets eerder gebruikt, "flikkerend" het toggle-nummer naar de tweede monitor? Dan zou het script in plaats daarvan moeten doen wat's tussen de volgende accolades in plaats van de bovenstaande.
{
SysGet, Mon2, Monitor, 2; Koop de tweede monitor's details
Mon2Width := Mon2Right - Mon2Left; Bereken de tweede monitor's werkelijke breedte.
Mon2Height := Mon2Bottom - Mon2Top; Bereken de tweede monitor's werkelijke hoogte.

TargetX := (Mon2Width/2)-(Breedte/2)+A_ScreenWidth; Bereken waar het raam moet worden verplaatst. Merk op dat we ook de primaire monitor toevoegen's breedte sinds AutoHotKey kan't verplaats vensters op individuele monitoren maar over hun gecombineerde "oppervlakte".
TargetY := (Mon2Height/2)-(Hoogte/2)+Mon2Top; Bereken het optimale verticale doel voor het verplaatsen van het venster op de tweede monitor. Zoals hierboven, de tweede monitor's verticale details worden gedetecteerd in relatie tot de primaire monitor. We moeten dus creatief zijn om een ​​optimaal doel te krijgen door te erkennen hoe de tweede monitor's top is't gelijk aan 0 (zoals de primaire)'s).

PositieToggle = 1; Veeg de schakelaar terug zodat indien we hergebruiken de sneltoets, de raam gaat terug naar de primaire monitor.
}

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%; De eigenlijke actie, het verplaatsen van de actieve raam naar onze berekende coördinaten.

opbrengst

Een raam centreren met een sleutel, de gemakkelijke manier

En nu ben je klaar! Als alles goed werkt, kunt u nu uw nieuw ingestelde sneltoets gebruiken om op elk moment een venster te centreren.

Vind waar u uw tijd verspilt aan Windows met AutoHotKey

Lees volgende

DelenTweetenDelenE-mail

Gerelateerde onderwerpen

  • ramen
  • Windows 10
  • Windows 11
  • Autosneltoets
  • Windows-aanpassing

Over de auteur

Odysseas Kourafalos (31 artikelen gepubliceerd)

Het echte leven van OK begon rond 10, toen hij zijn eerste computer kreeg - een Commodore 128. Sindsdien smelt hij keycaps door 24/7 te typen, in een poging The Word Of Tech te verspreiden onder iedereen die geïnteresseerd genoeg is om te luisteren. Of beter gezegd: lezen.

Meer van Odysseas Kourafalos

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren