Automatiseer programma's met AutoHotkey

© PXimport

Automatiseer programma's met AutoHotkey

Geplaatst: 8 mei 2018 - 06:40

Aangepast: 16 november 2022 - 10:35

Toon van Daele

Met de macro-functies die in sommige programma’s zijn ingebouwd of door middel van batchbestanden, kun je een en ander automatiseren. Maar het gratis opensource AutoHotkey geeft je veel meer mogelijkheden, en werkt onafhankelijk van de gebruikte applicatie. Met een sneltoets woorden invoegen, een toets of muisknop herdefiniëren, een menu-item automatisch laten aanklikken … het kan allemaal.

AutoHotkey is een gratis opensource scripting-tool waarmee je computertaken kunt automatiseren. De mogelijkheden zijn legio: de muiscursor met het toetsenbord aansturen, een systeem monitoren en ongewenste programma’s sluiten, formulieren automatisch laten invullen, een taak inplannen, programma’s en webpagina’s met een sneltoets openen, tekstmacro’s in om het even welke toepassing laten werken, games aansturen en ga zo nog maar even door.

AutoHotkey is een scripting-taal, wat inhoudt dat je de syntax enigszins in de vingers moet krijgen. Enig programmeerinzicht is handig meegenomen, maar zelfs als complete leek kun je er snel mee aan de slag, zoals uit dit artikel zal blijken.

AutoHotkey is volgens de makers “de ultieme scripttaal voor Windows”.

© PXimport

Verder leren

01 Installatie

Om de scripts die we dadelijk zullen bekijken én maken ook zelf uit te kunnen voeren,

heb je natuurlijk een programma nodig dat die scripts kan uitvoeren (interpreter). Die vind je hier. Je gaat bij voorkeur voor de recentste stabiele versie, op het moment van dit schrijven is dat versie 1.1.26.01. Je kunt kiezen tussen een Express Installation en een Custom Installation. We raden je aan voor de Custom installation te gaan, al was het maar om op de diverse tabbladen de verschillende opties even te bekijken. Tenzij je scripts op een 32bit-systeem moeten kunnen draaien, kies je bij voorkeur voor Unicode 64-bit. Bevestig met Install.

Tenzij je specifieke redenen hebt om dat niet te doen, kies je voor Unicode 64-bit.

© PXimport

02 Editor

Voor je het goed beseft is de installatie al een feit. Op het eerste gezicht blijkt daar zo goed als niets van te merken: wanneer je AutoHotkey (kortweg AHK) opstart, krijg je alleen maar de ingebouwde helpfunctie te zien. Best handig natuurlijk, maar weinig spannend. Laten we daar snel iets aan doen en ons allereerste script schrijven. In feite heb je daar niets meer dan een uitgeklede teksteditor als Kladblok voor nodig, maar wij geven toch de voorkeur aan een wat uitgebreider programma. Een tool die je bijvoorbeeld de mogelijke commando’s toont terwijl je aan het intikken bent, die je scriptdelen laat in- en uitklappen, die met duidelijke kleuren werkt, regelnummering en tabbladen ondersteunt enzovoort, biedt vanzelfsprekend meer comfort. We gebruiken hier Scite4AutoHotkey (eveneens beschikbaar in een portable editie). De tool is weliswaar al een paar jaar oud maar werkt ook onder Windows 10 naar behoren. Eventuele updates laat je best meteen installeren. Standaard laadt de editor bij de eerste opstart een voorbeeldscript in (TestSuite.ahk), dat je via het blauwe pijlknopje meteen kunt uitvoeren. Handig als eerste kennismaking met de syntax. Mocht de code onverhoopt niet correct worden weergegeven, ga dan in het Language-menu na of wel degelijk nog de optie AutoHotkey is geselecteerd.

Een ‘intelligente’ editor werkt stukken makkelijker en overzichtelijker.

© PXimport

03 Oerscript

Van oudsher is het bij programmeurs de gewoonte om als allereerste script de boodschap ‘Hallo, wereld’ te laten verschijnen – een traditie die we graag volgen. Wie het voorbeeldscript uit stap 2 al even heeft bekeken, heeft al door dat je dit met één eenvoudige instructie voor elkaar krijgt: MsgBox Hallo, wereld. Overigens moet je je script wel eerst nog even opslaan (met de extensie ahk) voor je dit binnen de editor kunt laten uitvoeren. Merk ook op dat de editor zelf al het commando MsgBox suggereert zodra je ms intikt.

Leuk, maar waarom er niet meteen een ‘tekstmacro’ van maken die in nagenoeg elke applicatie doorwerkt? Dat doen we met een tweede scriptje, waarin we het eerste script oproepen:

::hw::
Run "c:\ahk scripts\hallowereld.ahk"
Return

Dit script is niet lastig te ontrafelen. Het houdt in: wanneer de lettercombinatie hw wordt ingetikt, wordt het script met de naam hallowereld.ahk in c:\ahk scripts uitgevoerd. De syntax voor eenvoudige lettercombinaties is dus ::, gevolgd door de lettercombinatie, waarna de instructies worden uitgevoerd die op de tweede instantie van :: volgt. In AutoHotkey sluiten we een meerregelig script netjes af met het commando Return.

Het kan eigenlijk nog eenvoudiger, wanneer je de lettercombinatie meteen door de volledige tekst laat vervangen: ::hw::Hallo, wereld.{Enter}Welkom in mijn script.{Enter}.

Handig: de editor toont je mogelijke commando’s evenals de parametersyntax.

© PXimport

04 Scriptuitvoer

In stap 5 pikken we de draad van de vorige stap weer op, maar eerst willen we je van de frustratie afhelpen om voor elk script telkens de editor te moeten starten, het script te openen en het uit te voeren. Het is namelijk mogelijk van zo’n script een heus exe-bestand te maken. Klik daartoe zo’n ahk-bestand in Verkenner met de rechtermuisknop aan en kies Compile Script – merk op dat je hier ook de opties Run Script en Edit Script aantreft. Even later staat het exe-bestand al voor je klaar.

Het kan gebeuren dat zo’n (al dan niet gecompileerd) script je op onverwachte manieren parten speelt. Je bent bijvoorbeeld in Word aan het werken om dan vast te stellen dat een van de (actieve) tekstmacro’s in AutoHotkey een bestaande sneltoets heeft gekaapt. Vervelend, maar gelukkig is er iets aan te doen: rechtsklik in het Windows-systeemvak op het scripticoontje, waarna je Suspend Hotkeys selecteert of – drastischer – Exit aanklikt.

Van script naar executable in twee muisklikken.

© PXimport

Eigen pictogram

Een gecompileerd ahk-script kun je probleemloos aan andere gebruikers doorgeven: die kunnen het dan ook uitvoeren zonder zelfs AutoHotkey nodig te hebben. Immers, de AutoHotkey-interpreter wordt in het exe-bestand gestopt. Leuk is ook dat je je eigen pictogram aan zo’n programma kunt koppelen. Open daartoe de programmagroep AutoHotkey en kies Convert .ahk to .exe. Via Browse verwijs je zowel naar het bronscript als naar het uitvoerpad. Met de onderste Browse-knop koppel je er dan een specifiek ico-bestand aan. Met Convert compileer je het script.

Handig om weten: met een gratis tool als GreenFish Icon Editor Pro zet je een eigen afbeelding moeiteloos om in zo’n ico-bestand.

Met de ingebouwde converter koppel je ook een eigen pictogram aan je exe-bestand.

© PXimport

Pop-upvensters

05 Speciale toetsen

Je weet uit stap 3 nu hoe je een tekstmacro, oftewel hotstring, creëert. We gaan nu aan de slag met het koppelen van een toetscombinatie (bijvoorbeeld Ctrl, Alt of Shift in combinatie met een andere toets) aan een handeling. De toetsnamen en veel meer over sneltoetsen kom je hier te weten. Onder Modifier lezen we daar bijvoorbeeld dat we de Alt-toets aanroepen met !, Ctrl met ^, Shift met +.

Stel, je wilt met de toetscombinatie Ctrl+Alt+C de webpagina van Computer!Totaal openen. Dat krijg je met één coderegel voor elkaar, waarbij je het pad moet vervangen door dat van jouw favoriete browser:

^!C::run "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://computertotaal.nl

Het feit dat je hier sneltoetsprefixen als ^(Ctrl) en ! (Alt) gebruikt, kan problemen opleveren bij code als ::ctot::Computer!Totaal, gezien het uitroepteken dan niet als leesteken wordt geïnterpreteerd, maar staat voor de Alt-toets. De oplossing is gelukkig eenvoudig: ::ctot::Computer{!}Totaal.

Wil je toetsaanslagen doorsturen na het indrukken van speciale sneltoetsen, dan moet je dat met het Send-commando regelen: #R:: Send, Computer{!}Totaal zorgt ervoor dat de tekst Computer!Totaal verschijnt zodra je Windows-toets+R indrukt. Het is uiteraard ook mogelijk meerdere hotstrings tegelijk te definiëren, iets als volgt:

::vn::Toon
#A::Send, van Daele
#E::Send, tvd@computertotaal.nl
Return

Een grafische ontwerpmodule voor pop-upvensters, beschikbaar in SciTE.

© PXimport

Kant-en-klaar

Autotext: je eigen hotstringmanager, kant-en-klaar in AutoHotkey-script.

© PXimport

06 Nog meer toetsen

AutoHotkey kan ook nog op andere manieren met het toetsenbord overweg. Zo is het mogelijk bepaalde toetsen uit te schakelen of om te wisselen, wat handig kan zijn als bijvoorbeeld bepaalde toetsen bij het gamen storend zijn of als je de toetsenbordbesturing liever anders ingevuld ziet.

Met $CapsLock::Return schakel je bijvoorbeeld de werking van de CapsLock-toets uit, iets gelijkaardigs is ook mogelijk voor ScrollLock en NumLock. Of je bepaalt zelf de status van zulke toetsen met een commando als SetNumLockState, on. Uiteraard kun je ook vaste toetscombinaties in Windows uitschakelen, zoals met #e::Return (roept normaliter de Verkenner op) of je hangt er een andere functie aan, zoals met $LWin:: Send ^{Tab} (zorgt ervoor dat je met de LinkerWindows-toets naar de volgende tab gaat in je browser, wat je normaliter met Ctrl+Tab doet).

Op vergelijkbare manier kun je aan toetsen ook allerlei acties koppelen, zoals het volume verhogen of verlagen in stapjes van 6% via Windows-toets in combinatie met de – of +-knop op je numerieke toetsenbord:

$#NumpadSub:: Send {Volume_Down 3} ; geluid 6% verlagen
$#NumpadAdd:: Send {Volume_Up 3} ; geluid 6% verhogen

Merk trouwens op dat je na een puntkomma (op de meeste plaatsen) ook commentaar aan je script kunt toevoegen: handig als je het script naderhand wil bewerken of wanneer je het wilt delen.

Stel zelf je ‘multimedia-toetsenbord’ samen met behulp van AutoHotkey.

© PXimport

07 Klembord

AutoHotkey kan ook gebruikmaken van het klembord van Windows, wat opnieuw handige mogelijkheden biedt. Zo is het mogelijk een woord naar het klembord te sturen waarna je met een sneltoets de inhoud van het klembord doorspeelt aan Google:

^g::
Run https://www.google.com/search?q=%clipboard%
Return

Een nieuw element in deze code is de variabele %clipboard%, die de actuele inhoud van het klembord gebruikt als parameter (zoekstring) van de opgegeven url. Je zou er ook iets als ^a:: Run https://www.google.com/search?tbm=isch&q=%clipboard% aan kunnen toevoegen als je naar afbeeldingen zoekt. Of je gebruikt de query-url van een andere service, zoals Wikipedia: Run http://nl.wikipedia.org/wiki/Special:Search?search=%clipboard%.

Er zijn natuurlijk ook allerlei uitbreidingen en varianten mogelijk voor verdere interactie met het klembord. {F12}:: Send, ^C bijvoorbeeld zorgt ervoor dat het indrukken van F12 de toetscombinatie Ctrl+C genereert, wat maakt dat een geselecteerd tekstdeel naar het klembord wordt gestuurd. Het is ook mogelijk een stukje tekst aan de reeds bestaande inhoud van het klembord toe te voegen, in plaats van dat te vervangen:

Insert::
oud = %clipboard%
Send, ^c
clipboard = %oud%`r`n%clipboard%
return

Eerst plaatsen we de actuele inhoud van het klembord in de variabele oud, waarna we bij het indrukken van de Insert-toets de variabele clipboard vervangen door de variabele oud samen met de actuele inhoud van het klembord. Om te vermijden dat de inhoud letterlijk aan elkaar wordt geplakt, voegen we er de code `r`n aan toe: die zorgt ervoor dat het daaropvolgende deel op een nieuwe regel terechtkomt.

Een eenvoudig script zorgt voor interactie met het Windows-klembord.

© PXimport

08 Muis & venster

AutoHotkey kan ook uitstekend overweg met vensters en muisklikken. Een eenvoudig voorbeeld geeft je al een idee waar het naartoe gaat. Stel, je gebruikt een bepaalde applicatie waar je frequent dezelfde menu-optie nodig hebt. Die kun je natuurlijk telkens zelf aanklikken, maar het is ook mogelijk dat door een sneltoets te laten doen:

^m::
Click Left 143,45
Click Left 183,94
Return

Eerst zal de muiscursor naar de schermcoördinaten 143,45 bewegen en daar wordt een druk op de linkermuisknop gegenereerd zodat het uitklapmenu wordt geopend, vervolgens gebeurt hetzelfde op coördinaten 183,94 om het menu-item te selecteren. Voor wie zich afvraagt hoe hij die coördinaten uitvist: in SciTE druk je op het knopje Active Window Info. Zodra je nu de muiscursor boven het programmavenster beweegt, lees je alle nodige informatie af, waaronder de coördinaten en de exacte vensternaam.

09 Programmeerlussen

Elke scripting-taal die z’n naam waardig draagt, ondersteunt ook specifieke programmeerconstructies als lussen en conditionele uitvoer. Dus dat vinden we ook in AutoHotkey. We hebben niet de ruimte om er diep op in te gaan, maar een paar eenvoudige voorbeelden kunnen je al een eind op weg zetten.

Stel dat je met een sneltoets het muiswiel bestuurt en je wilt bij elke druk op de toets het muiswiel vijf keer naar beneden laten draaien. Dat kan met een simpel loop-commando:

^m::
Loop, 5
Click WheelDown ; gebruik WheelUp voor de andere richting
Return

Ook andere lusconstructies zijn mogelijk, zoals een while-loop (zolang … geldt, voer … uit).

Het volgende voorbeeld is al iets complexer. Hierbij worden in een tooltip de startcoördinaten evenals de breedte en hoogte van de rechthoek binnen het sleepgebied getoond, zolang sleepbeweging aanhoudt:

CoordMode, Mouse, Screen
~LButton::
MouseGetPos, begin_x, begin_y
while GetKeyState("LButton")
{
MouseGetPos, x, y
ToolTip, % begin_x ", " begin_y "`n " Abs(begin_x-x) "
x " Abs(begin_y-y)
Sleep, 10
}
ToolTip
Return

Test het script uit om het resultaat te zien. Voor uitgebreide achtergrondinformatie over CoordMode en ToolTip kun je hier terecht, waar je ook van de zoekbalk gebruik kunt maken. We raden je overigens aan vooral in het begin veelvuldig met deze tutorial en zoekfunctie te werken: je vindt er uitstekende feedback en praktische voorbeelden.

Veel succes met AutoHotkey. We vernemen het graag als je zelf een handig script hebt ontwikkeld!

Lussen zijn handige constructies om repetitieve handelingen uit te laten voeren.

© PXimport

Grafische interface

Deel dit artikel
Voeg toe aan favorieten