AutoIt: een taak op tijd starten met RunWait en schtasks
RunWait is handig als AutoIt een ander programma moet starten en eerst moet wachten tot dat klaar is. Hier gebruiken we dat met schtasks,de Windows-taakplanner. Daarmee kun je een script of taak op een vast moment laten draaien, zonder dat je zelf moet blijven kijken.
Kort probleem
Je hebt een script dat niet meteen moet starten, maar pas later. bijvoorbeeld elke dag om 18:00, of na een paar minuten. Dan is het onhandig om handmatig op een knop te drukken.
met schtasks maak je een taak in Windows. Met RunWait start AutoIt dat commando en wacht het netjes af. Zo weet je zeker dat de taak aanmaken klaar is voordat je verdergaat.
De kern van de oplossing
De combinatie is simpel:
schtasksdoet het werk in Windows.RunWaitstart dat commando vanuit AutoIt.- AutoIt wacht tot het klaar is.
Dat is handig als je een taak wilt maken, aanpassen of verwijderen en pas daarna verder wilt gaan in je script. RunWait is dus niet de planner zelf.Het is de manier waarop AutoIt het planner-commando uitvoert.
De doc van runwait staat hier:
https://www.autoitscript.com/autoit3/docs/functions/RunWait.htm
En de Windows-hulp voor schtasks kun je ook opzoeken via Microsoft Support of de commandoregelhulp op je pc.
Stap voor stap
Eerst bedenk je wat je wilt plannen. in dit voorbeeld maken we een taak die op een vaste tijd een programma start. Je kunt daar jouw eigen .exe of .au3-oplossing inzetten.
Daarna bouw je een schtasks-regel. Een simpele taak heeft meestal deze dingen nodig:
- een naam voor de taak
- het moment van starten
- het commando dat moet lopen
Voor een vaste tijd is schtasks zelf precies wat je zoekt. AutoIt hoeft dan alleen het commando te geven.
Zo werkt het in de praktijk
- Maak de taaknaam duidelijk.
- Kies de starttijd.
- Geef op welk programma moet draaien.
- Start
schtasksmetRunWait. - Lees eventueel de foutcode uit.
Als je RunWait gebruikt, kun je wachten op de uitkomst. Dat is beter dan blind doorgaan. Zeker als je daarna nog een tweede stap wilt doen, zoals een melding tonen of een controle uitvoeren.
Voorbeeldcode
Hieronder staat een praktisch voorbeeld.Dit maakt een taak aan die elke dag om 18:00 een programma start. Vervang het pad naar het programma door jouw eigen bestand.
Local $sTaskName = "MijnDagTaak"
Local $sProgram = 'C:ToolsMijnScript.exe'
Local $sTime = "18:00"
Local $sCmd = 'schtasks /Create /SC DAILY /TN "' & $sTaskName & '" /TR "' & $sProgram & '" /ST ' & $sTime & ' /F'
Local $iExitCode = RunWait(@ComSpec & ' /c ' & $sCmd, "", @SW_HIDE)
If $iExitCode = 0 Then
MsgBox(64, "Klaar", "De taak is aangemaakt.")
Else
MsgBox(16, "Fout", "De taak kon niet worden aangemaakt. Exitcode: " & $iExitCode)
EndIf
Wat gebeurt hier?
@ComSpecgeeft de Windows-commandoshell./czegt: voer dit commando uit en stop daarna.schtasks /Createmaakt een taak aan./SC DAILYmaakt er een dagelijkse taak van./TNgeeft de taaktitel./TRgeeft het programma dat moet draaien./STzet de starttijd./Fdwingt aanmaken af als de taak al bestaat.
@SW_HIDE zorgt ervoor dat het venster niet in beeld komt. Dat is vaak fijner als de gebruiker er niet mee bezig hoeft te zijn.
Wat betekenen de belangrijkste stukken?
Hier is een klein overzicht van de delen die je vaak gebruikt:
| Deel | Betekenis | voorbeeld |
|---|---|---|
/create | maakt de taak aan | schtasks /Create |
/SC DAILY | laat de taak dagelijks lopen | elke dag |
/TN | naam van de taak | "MijnDagTaak" |
/TR | programma of opdracht | "C:ToolsMijnScript.exe" |
/ST | starttijd | 18:00 |
/F | overschrijft als de taak al bestaat | handig bij wijzigen |
Handige variant: eerst testen met een simpele opdracht
Wil je eerst controleren of alles goed loopt? Gebruik dan een simpele opdracht, zoals cmd /c echo test. Dan zie je snel of RunWait werkt en of het pad goed is.
Local $iExitCode = RunWait(@ComSpec & ' /c echo test', "", @SW_HIDE)
MsgBox(64, "Test", "Exitcode: " & $iExitCode)
Dat zegt nog niets over je taak zelf, maar het laat wel zien of de manier van starten klopt.Daarna kun je overstappen naar de echte
schtasks
-regel.
Veelgemaakte fout
De grootste fout is een niet goed gequote pad. Als je programma of taaktitel spaties heeft, moet je de aanhalingstekens goed zetten. Anders snapt Windows het commando fout. Dat geeft vaak een stille mislukking of een rare exitcode.
Nog een fout: denken dat RunWait de taak zelf plant. dat doet het niet. RunWait start alleen het commando. schtasks maakt de planning.
Let ook op het pad naar het programma:
- bestaat het bestand echt?
- staat er geen typefout in de mapnaam?
- draait het als de taak start ook goed zonder jouw sessie?
Kleine uitbreiding
Je kunt ook een taak laten starten op andere momenten, zolang schtasks dat ondersteunt.De kern blijft hetzelfde: AutoIt roept via RunWait het juiste commando op.Alleen de opties van schtasks veranderen.
Je kunt dus dezelfde aanpak gebruiken voor:
- een eenmalige taak
- een dagelijkse taak
- een taak met een andere planning
Het fijne is dat AutoIt hier niet veel extra werk voor hoeft te doen. Het script blijft klein en duidelijk. Dat scheelt gepruts, en dat is altijd fijn voor de beverburcht 🦫
Bevers gedachte
Als je iets op een vast moment wilt starten, is de combinatie van RunWait en schtasks lekker nuchter. AutoIt geeft het commando door, Windows plant de taak, en jij kunt meteen zien of het goed ging. Geen gedoe, gewoon een duidelijke stap met een duidelijke uitkomst.
