Resulta, que ahora me ha dado por querer registrar una función para el inicio, y otra para la finalización de los programas (me parece una forma ... más elegante de hacer el código :).
Pero hay un par de cosas que no terminan de convencerme. En realidad, solo la primera, la segunda es una curiosidad.
Al registrar la función de inicio con #OnAutoItStartRegister, pasan cosas algo raras, que tienen que ver con la forma que tengo de organizar el script cuando es mucho código el que hay que escribir.
Suelo hacer un archivo para cada cosa, para tener el código bien ordenado:
Un archivo para variables globales, otro para funciones de la interfaz, etc.
Entonces, en el archivo que incluye todos los archivos, además de un:
Código: Seleccionar todo
While 1
Sleep(10)
Wend
Resulta, que como la función quiera usar variables globales o constantes, da error, porque dice que no están declaradas. Eso tiene su parte de lógica, porque la función registrada es lo primero que se ejecuta, teóricamente. Pero, sin embargo los archivos se incluyen antes de ejecutar esa función, porque si intento usar una función que esté en uno de los archivos que he incluido, no da error de que no esté declarada.
La solución sería quizá declarar las variables globales y las constantes desde la función invocada al inicio...
Pero además, si soluciono ese problema declarando así las variables, da errores raros de funciones duplicadas con librerías que no deberían dar ningún problema, como Array.au3, etc.
Lo segundo, es la función de salida.
He visto que pasa algo curioso. Vuelve a poder tener su lógica, pero pensaba que no funcionaría así:
Código: Seleccionar todo
Opt("MustDeclareVars", 1)
OnAutoItExitRegister("_ShutDownFile")
Global $MyVar="Prueba de errores sintácticos de AutoIt"
MsgBox(0, "Test de errores", $MiVar)
Exit(0)
Func _ShutDownFile()
MsgBox(0, "Test de errores", "Cerrando el programa."&@CRLF&"El código de salida es: "&@ExitCode&".")
EndFunc
Como es de esperar, da un error de que la variable no está declarada. Yo pensaba, que en este punto, al pulsar aceptar, se cerraría el programa sin más, pero como _ShutDownFile() está registrada para que se ejecute al cerrar el programa, pues parece que incluso petando el script se ejecuta...
La duda es:
¿Hay alguna forma más fiable de saber en esa función si el script ha finalizado porque ha petado?. Si os fijáis, tal como está devuelve 1 en código de salida. Pero no lo veo muy fiable, pues yo puedo hacer:
Código: Seleccionar todo
Exit(1)
¡FELICES FIESTAS!
Salu2!