Bei ner CUI wird die Exit Funktion nicht aufgerufen. Gibts da evtl. nen Workaround? Kann nichts finden
Danke + Gute Nacht.
CUI + OnAutoItExitRegister
-
- [ gelöst ]
-
blubbstar -
30. Dezember 2010 um 04:45 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Hey,
Du meinst wahrscheinlich wenn du eine Console via X beendest. Das Problem dabei ist, dass das kein Ersatz für eine Exit Funktion ist, sondern das Script dann gekillt wird (ProcessClose sozusagen).
Möglichkeit
a) Du baust dir ne GUI
b) du gibst dem User eine andere Möglichkeit das Script zu beenden
c) Du packst ein Script in ein Script, also das erste SCript mit FileInstall einbinden (wird dann als CUI Kompeliert) und das zweite Script wartet bis das erste Script sich beendet hat und führt dann die gewünschten Opterationen aus
d) Du suchst mal im englischen Forum, ich glaube ich hab mal ein hübscheres Workarround gefunden, finde es aber grade leider nicht wieder.Gruß
Spider -
Danke dir, damit habe ich fast gerechnet
Ich schau mich mal noch ein bisschen im Englischen rum, vllt find ich was! -
Die wird bei mir aufgerufen:
[autoit]
[/autoit][autoit][/autoit][autoit]
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_UseX64=n
OnAutoItExitRegister("_Exit")ConsoleWrite("Hallo World" & @CRLF)
[/autoit][autoit][/autoit][autoit]
Sleep(3000)Func _Exit()
[/autoit]
MsgBox(0, "Ende", "Ende", 10)
Exit
EndFuncGruß,
UEZ -
Nur wenn mans laufen lässt. Schließt man es mit X, gehts nicht.
-
So kann man es machen:
Spoiler anzeigen
[autoit]#AutoIt3Wrapper_Change2CUI=y
[/autoit] [autoit][/autoit] [autoit]#OnAutoItStartRegister "__ConsoleExitHandlerRegister"
[/autoit] [autoit][/autoit] [autoit]
Func __ConsoleExitHandlerRegister()
DllCall("Kernel32.dll", "bool", "SetConsoleCtrlHandler", "ptr", DllCallbackGetPtr(DllCallbackRegister("__ConsoleExitHandler", "bool", "dword")), "bool", 1)
EndFunc ;==>__ConsoleExitHandlerRegisterFunc __ConsoleExitHandler($dwCtrlType)
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', "")
Exit
EndFunc ;==>__ConsoleExitHandlerWhile 1
[/autoit]
Sleep(200)
ConsoleWrite(@SEC & @CRLF)
WEnd -
Erste Sahne! Vielen Dank!
-
Bei einem normalen beenden wird das aber nicht aufgerufen, also vergiss OnAutoItExitRegister nicht.