Automatisch wachten tot een proces echt klaar is met ProcessWaitClose
Je kent het vast wel: je start een programma met AutoIt en wil daarna pas verder wanneer dat programma helemaal is afgesloten. Maar hoe weet je zeker dat het programma klaar is? Alleen kijken of het venster weg is, is niet altijd genoeg. Hier komt ProcessWaitClose goed van pas. Die functie wacht netjes tot een proces echt stopt.
Waarom wil je hierop wachten?
Stel, je runt een installatie of een ander programma via AutoIt. Daarna wil je een volgende stap doen, bijvoorbeeld een logbestand lezen of een ander programma starten. Als je dan te snel doorgaat, kan dat misgaan. Het oude programma is misschien nog bezig of sluit langzaam af. Daardoor gaat jouw script mis.
Met ProcessWaitClose kun je wachten tot het proces echt gestopt is. Zo weet je zeker dat je veilig verder kan.
hoe werkt ProcessWaitClose?
ProcessWaitClose kijkt of een proces (programma) nog draait,op basis van de naam of het proces-ID. Hij wacht totdat het proces weg is of tot een timeout. Daarna geeft hij terug of het gelukt is om te wachten.
Belangrijk:
- Je geeft een procesnaam mee, bijvoorbeeld
"notepad.exe". - Je kunt een timeout instellen, in seconden. Als het proces niet stopt binnen die tijd, stopt de functie ook.
- De functie retourneert
1als het proces gesloten is,0als de timeout verloopt zonder sluiten.
Stap voor stap aan de slag
- Start eerst je programma met
run(). Die functie geeft het proces-ID (PID) terug. - Gebruik
ProcessWaitClosemet dat PID of de procesnaam om te wachten tot het proces stopt. - Controleer het resultaat om te zien of het lukte binnen de timeout.
- Ga daarna pas door met je script.
voorbeeld met timeout
Hieronder een voorbeeld waarin je klok.exe start (dat is een Windows-programma met een klok). Het script wacht maximaal 10 seconden tot het programma sluit. Daarna gaat het verder.
; Start klokken-app en krijg het proces-ID
local $pid = Run("timedate.cpl")
; Wacht maximaal 10 seconden tot het proces sluit
Local $isClosed = ProcessWaitClose($pid, 10)
If $isClosed Then
MsgBox(0, "Klaar", "Het proces is netjes afgesloten.")
Else
MsgBox(16, "Timeout", "Het proces is nog steeds actief na 10 seconden!")
EndIf
Let hier op
- Gebruik liever het proces-ID uit
Run()dan alleen de naam van het proces.Soms draaien er meerdere processen met dezelfde naam. - De timeout is handig om vast te leggen dat je script niet blijft hangen.
ProcessWaitClosewerkt alleen op processen, niet op vensters. Een venster kan verdwijnen terwijl het proces nog actief is.- Combineer met
ProcessExists()als je wilt checken of een proces al draait.
| Parameter | Beschrijving |
|---|---|
| Procesnaam/PID | Naam van het proces of het proces-ID |
| Timeout | Hoe lang wachten in seconden (optioneel) |
Bevers gedachte
Met ProcessWaitClose houd je de controle over je script. Het is een simpele, maar betrouwbare manier om te wachten tot een programma echt klaar is. Zo voorkom je fouten en onvoorspelbaar gedrag. gebruik altijd een timeout,zodat je script niet vastloopt. En werk zo veel mogelijk met het proces-ID, dat scheelt gedoe als er meer processen met dezelfde naam zijn. Kortom: handig, veilig en netjes. Klaar om in je eigen scripts te gebruiken!
