Vamos a ver, el primer código no se espera 25segs, eso es el máximo, esperará eso si no salen las ventanas.
WinWait deja de esperar en cuanto aparece la ventana, si cada ventana aparece en un segundo, pues esperará 5 segundos en total, si aparecen cada décima de segundo, tardará sólo medio segundo en total.
El while no funciona como quieres porque no se llega al until hasta que ha ejecutado todo un ciclo, y para eso debe pasar por todos los WinWait.
El problema es que como estás encadenadas si una no sale no hace falta esperar a las demás porque tampoco van a salir.
Lo que tienes que hacer es que si una ventana no sale en 5 segundos, parar el proceso, no seguir esperando las demás, pues de todas maneras no van a salir.
Empezaría algo así como:
Código: Seleccionar todo
If Not WinWaitActive("Titulo", "", 5) Then
ProcessClose("xxxxxx.exe")
return 0; ver notas abajo sobre la manera de salir
EndIf
ControlClick("Titulo", "", "button1")
Y lo mismo en todas las demás.
Bueno, porque entiendo que ese ProcessClose no es de tu programa AutoiT, sino de ese del que estás mirando las ventanas ¿no?
El return tiene sentido si estás dentro de una función (lo normal también sería poner algo en @error) luego es cosa del que llama mirar si hay error y dar un mensaje o lo que sea. Si simplemente vas a salir puedes poner un EXIT y ya está, aunque deberías dar un mensaje antes al usuario para que sepa que el programa ha parado porque la ventana no ha salido en 5segs...
Por supuesto todo esto es sin el while.