Logout in AutoIt abfangen?

  • Mein Script schreibt beim Beenden in eine Log-Datei. Wenn der User vergisst, das Script zu beenden und meldet sich ab oder fährt den Rechner runter, dann fehlt mir der Eintrag im Log. Gibt es eine Möglichkeit, das AutoIt-Programm über den eigenen vorgesehenen Weg zu beenden beim Abmelden des Users oder beim Runterfahren?

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Das ging aber schnell - danke ;-)


    Und funktioniert perfekt - eine Zeile mehr im Programm und alle Probleme sind weg!

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

    Einmal editiert, zuletzt von HansJ54 ()

  • Kleines Problem noch: über OnAutoItExitRegister gibt es als Grund @exitMethod. Da ich aber sowohl bei normalem Beenden wie auch bei Logoff in die gleiche Terminate-Funktion springe und dort @exitMethod abfrage, bekomme ich bei "normalem" Ende einen Fehler wegen der nicht existierenden @exitMethod (genau verstanden habe ich das allerdings nicht). Gibt es eine Prüfung, ob @exitMethod existiert?

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Normaler Exit bringt:

    $EXITCLOSE_BYEXIT (1)

    Code
    #include <MsgBoxConstants.au3>
    OnAutoItExitRegister("MyTestFunc")
    Sleep(1000)
    Exit
    Func MyTestFunc()
    MsgBox($MB_SYSTEMMODAL, "Exit Result", 'Exit Method ' & @exitMethod)
    EndFunc ;==>MyTestFunc
  • Da ich aber sowohl bei normalem Beenden wie auch bei Logoff in die gleiche Terminate-Funktion springe und dort @exitMethod abfrage, bekomme ich bei "normalem" Ende einen Fehler wegen der nicht existierenden @exitMethod (genau verstanden habe ich das allerdings nicht).

    Das Makro @exitMethod in der Terminate-Funktion ist nur dann verfügbar, wenn die Funktion von OnAutoItExitRegister aufgerufen wird und dies passiert nur dann, wenn eine der Exit-Mode-Bedingungen erfüllt ist.


    Springst du von anderer Stelle in diese Funktion, dann gibt es das Makro nicht, weil dann keine der Exit-Mode-Bedingungen erfüllt ist. Anstatt also die Terminate-Funktion direkt aufzurufen, könntest du einfach ein Exit machen, wodurch die Funktion dann auch aufgerufen wird und dann auch das Makro verfügbar ist.


    Testen ob das Makro existiert könnte man z.B. so:

    Das ist mbMn. aber kein guter Programmierstil...

  • Danke, jetzt fehlt mir noch eine Idee, wie ich bei einer GUI unterscheiden kann, ob der User Esc oder das X oben rechts gedrückt hat, da $GUI_EVENT_CLOSE bei beiden = True ist.

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Danke, jetzt fehlt mir noch eine Idee, wie ich bei einer GUI unterscheiden kann, ob der User Esc oder das X oben rechts gedrückt hat, da $GUI_EVENT_CLOSE bei beiden = True ist.

    ESC kannst du evtl. mit @HotKeyPressed oder mit Execute('@HotKeyPressed') ermitteln.


    Wenn oben rechts das X gedrückt wurde, bekommst du die Message $GUI_EVENT_CLOSE, und dann kommt es darauf an, wie du darauf reagierst:

    • ExitLoop ? dann ist der Exit-Mode = $EXITCLOSE_NORMAL
    • Exit ? dann ist der Exit-Mode = $EXITCLOSE_BYEXIT

    glaube ich zumindest... 8o

  • Wenn oben rechts das X gedrückt wurde, bekommst du die Message $GUI_EVENT_CLOSE, und dann kommt es darauf an, wie du darauf reagierst:

    $GUI_EVENT_CLOSE bekomme ich scheinbar auch, wenn ESC gedrückt wurde.


    Aber mir ist jetzt aufgefallen, dass ich eigentlich nur das Beenden mit meiner selbst erzeugten Endetaste zulassen will, also frage ich $GUI_EVENT_CLOSE einfach nicht mehr ab.

    Dann bleibt nur der Fall, dass jemand sich abmeldet oder den Rechner runterfährt und das habe ich mit OnAutoItExitRegister abgefangen.

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl: