Een geplande taak aanmaken vanuit AutoIt

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:

  • schtasks doet het werk in Windows.
  • RunWait start 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

  1. Maak de taaknaam duidelijk.
  2. Kies de starttijd.
  3. Geef op welk programma moet draaien.
  4. Start schtasks met RunWait.
  5. 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?

  • @ComSpec geeft de Windows-commandoshell.
  • /c zegt: voer dit commando uit en stop daarna.
  • schtasks /Create maakt een taak aan.
  • /SC DAILY maakt er een dagelijkse taak van.
  • /TN geeft de taaktitel.
  • /TR geeft het programma dat moet draaien.
  • /ST zet de starttijd.
  • /F dwingt 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:

DeelBetekenisvoorbeeld
/createmaakt de taak aanschtasks /Create
/SC DAILYlaat de taak dagelijks lopenelke dag
/TNnaam van de taak"MijnDagTaak"
/TRprogramma of opdracht"C:ToolsMijnScript.exe"
/STstarttijd18:00
/Foverschrijft als de taak al bestaathandig 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.