OnExit

Registriert eine Funktion, die jedes Mal automatisch aufgerufen wird, wenn das Skript beendet wird.

OnExit Rückruf , HinzufügenEntfernen

Parameter

Rückruf

Typ: Funktionsobjekt

Eine Funktion, die aufgerufen werden soll.

Die Rückruffunktion akzeptiert zwei Parameter und kann wie folgt definiert werden:

MeinRückruf(ExitGrund, ExitCode) { ...

Es spielt keine Rolle, welche Namen Sie den Parametern geben, allerdings werden ihnen die folgenden Werte nacheinander zugewiesen:

  1. Der Exitgrund (eines der Wörter aus der unteren Tabelle).
  2. Der Exitcode, der an Exit oder ExitApp übergeben wurde.

Es können beliebig viele Parameter am Ende der Parameterliste der Rückruffunktion weggelassen werden, wenn die entsprechenden Informationen nicht benötigt werden, aber dann muss als letzter Parameter ein Sternchen angegeben werden, z.B. MeinRückruf(Param1, *).

Die Rückruffunktion kann einen Integer ungleich 0 zurückgeben, um zu verhindern, dass das Skript beendet wird (mit einigen seltenen Ausnahmen) und dass weitere Rückruffunktionen aufgerufen werden. Andernfalls wird das Skript beendet, nachdem alle registrierten Rückruffunktionen aufgerufen wurden.

HinzufügenEntfernen

Typ: Integer

Wenn weggelassen, wird standardmäßig 1 verwendet. Andernfalls geben Sie eine der folgenden Zahlen an:

Bemerkungen

Es können beliebig viele Rückruffunktionen registriert werden. Eine Rückruffunktion sollte in der Regel kein ExitApp aufrufen, da sonst das Skript sofort terminiert werden würde.

Die Rückruffunktionen werden aufgerufen, sobald das Skript auf irgendeine Weise beendet wird (außer es wird durch so etwas wie "Task beenden" gekillt). Sie wird auch jedes Mal aufgerufen, wenn #SingleInstance oder Reload eine ältere Instanz auffordert, sich zu terminieren.

Mit OnMessage(0x0011, On_WM_QUERYENDSESSION) kann das Herunterfahren oder Abmelden des Betriebssystems erkannt und optional abgebrochen werden (siehe OnMessage-Beispiel #2 für ein lauffähiges Beispiel).

Der OnExit-Thread ignoriert #MaxThreads (er wird immer bei Bedarf gestartet). Außerdem kann dieser Thread, während er ausgeführt wird, nicht von anderen Threads unterbrochen werden, z.B. erzeugt durch Hotkeys, benutzerdefinierte Menüpunkte und zeitgesteuerte Subroutinen. Allerdings wird er unterbrochen (und das Skript terminiert), wenn der Benutzer "Exit" im Tray-Menü oder Hauptmenü auswählt oder wenn das Skript durch Reload oder #SingleInstance aufgefordert wurde, sich zu terminieren. Aus diesem Grund sollte eine Rückruffunktion so konzipiert sein, dass sie schnell zum Ende kommt, es sei denn, der Benutzer ist sich dessen bewusst, was sie tut.

Wenn der OnExit-Thread auf ein Problem stößt, wie z.B. einen Laufzeitfehler, wird das Skript terminiert.

Wenn der OnExit-Thread durch Exit oder ExitApp unter Angabe eines Exitcodes gestartet wurde, wird dieser Exitcode verwendet, es sei denn, eine Rückruffunktion gibt 1 (true) zurück, um die Beendigung zu verhindern, oder ruft ExitApp auf.

Jedes Mal, wenn ein Exitversuch unternommen wird, verwendet jede Rückruffunktion vorerst die Standardwerte von Einstellungen wie SendMode. Diese Standardwerte können während der Startphase des Skripts geändert werden.

Exitgründe

Grund Beschreibung
Logoff Der Benutzer meldet sich ab.
Shutdown Das System wird gerade heruntergefahren oder neu gestartet, z.B. durch die Shutdown-Funktion.
Close

Das Skript hat eine WM_CLOSE- oder WM_QUIT-Meldung empfangen, ist auf einen kritischen Fehler gestoßen oder wurde anderweitig geschlossen. All diese Fälle sind ungewöhnlich. WM_CLOSE könnte z.B. durch die Anwendung von WinClose auf das Hauptfenster des Skripts verursacht worden sein. Um das Fenster zu schließen (zu verstecken), ohne das Skript zu terminieren, verwenden Sie WinHide.

Wenn das Skript durch einen kritischen Fehler oder die Zerstörung des Hauptfensters beendet wird, wird es nach Abschluss des OnExit-Threads bedingungslos terminiert.

Wenn das Hauptfenster zerstört wird, existiert es möglicherweise noch, kann aber nicht angezeigt werden. Dieser Zustand kann durch Überwachung der WM_DESTROY-Meldung mittels OnMessage erkannt werden.

Error Es ist ein Laufzeitfehler in einem nicht-persistenten Skript aufgetreten. Ein Laufzeitfehler tritt z.B. auf, wenn Run/RunWait das angegebene Programm oder Dokument nicht öffnen kann.
Menu Der Benutzer hat "Exit" im Menü des Hauptfensters oder im regulären Tray-Menü ausgewählt.
Exit Es wurde Exit oder ExitApp verwendet (einschließlich benutzerdefinierter Menüpunkte).
Reload Das Skript wird gerade via Reload-Funktion oder -Menüpunkt neu geladen.
Single Das Skript wird gerade aufgrund von #SingleInstance mit einer neuen Instanz von sich selbst ersetzt.

OnError, OnMessage, CallbackCreate, OnClipboardChange, ExitApp, Shutdown, Persistent, Threads, Return

Beispiele

Fragt den Benutzer, bevor das Skript beendet wird. Um dieses Beispiel zu testen, rechtsklicken Sie auf das Tray-Symbol und wählen Sie Exit aus.

Persistent  ; Verhindert, dass das Skript automatisch beendet wird.
OnExit ExitFunk

ExitFunk(ExitGrund, ExitCode)
{
    if ExitGrund != "Logoff" and ExitGrund != "Shutdown"
    {
        Ergebnis := MsgBox("Wollen Sie das Skript wirklich beenden?",, 4)
        if Ergebnis = "No"
            return 1  ; Rückruffunktionen müssen ungleich 0 zurückgeben, um Exit zu verhindern.
    }
    ; ExitApp nicht verwenden - dies würde den Aufruf anderer Rückruffunktionen verhindern.
}

Registriert eine Methode, die bei Exit aufgerufen werden soll.

Persistent  ; Verhindert, dass das Skript automatisch beendet wird.
OnExit MeinObjekt.Beenden

class MeinObjekt
{
    static Beenden(*)
    {
        MsgBox "MeinObjekt räumt vor dem Beenden auf..."
        /*
        this.SageAufWiedersehen()
        this.SchließeNetzwerkVerbindungen()
        */
    }
}