Hilfe bei Sicherung bei herrunterfahren

  • Guten Abend liebe Autoit-Gemeinde
    hatte es im Chat kurz erwähnt aber hier mein Problem (Hoffe es ist nur ein Kleines).
    Habe ein Script das mit mehreren Oberflächen Funktioniert in dennen etwas eingetragen ausgewählt und geändert werden kann also ganz normal für eine Gui.
    Nun arbeiten aber mehrere leute später am fertigen Tool und da kam mir der Gedanke, das es ja warum auch immer irgendjemand von den Leuten (immer die Anderen natürlich) den PC herunterfahren könnte.

    Nun weiß ich das bei Excel, Textdateien usw. vorher immer eine abfrage kommt ob gespeichert werden soll.
    Das möchte ich auch das wenn das Tool Abbrechen sollte durch abmelden oder herunterfahren eine Meldung und die möglichkeit zum abspeichern kommt
    hatte schon mehrere ansätze einer war

    --------------------------------------------------------------------


    #include <Process.au3>

    OnAutoItExitRegister ("_CHK_ShutDown")
    While 1

    WEnd

    Func _CHK_ShutDown ()

    If @exitMethod = 3 or 4 Then
    MsgBox (0,"", exitMethod )
    ShellExecute ("shutdown.exe", "-a")

    EndIf

    EndFunc
    --------------------------------------------------------------------
    Die MsgBox zeigt er mir an auch die Info aber dann fehlermeldung??
    kann mir jemand helfen oder hab ich nur ein falschen ansatz und man kann mir den schubser in die richtige Richtung weisen
    wurmt mich das ich es nicht schaffe. ?(

    Einmal editiert, zuletzt von DaveTDancer (5. März 2014 um 23:35)

  • Lösung ist diese Funktion

    Spoiler anzeigen
    [autoit]


    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If _WinAPI_GetVersion() < '6.0' Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Require Windows Vista or later.')
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 200, 200)
    Local $Button = GUICtrlCreateButton('', 73, 62, 54, 54, $BS_ICON)
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 45)
    GUICtrlSetTip(-1, 'Log off ' & @UserName)
    Local $Check = GUICtrlCreateCheckbox('Block Windows shutdown', 10, 173, 144, 21)
    GUIRegisterMsg($WM_QUERYENDSESSION, 'WM_QUERYENDSESSION')
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    ; Set the highest shutdown priority for the current process to prevent closure the other processes.
    _WinAPI_SetProcessShutdownParameters(0x03FF)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Button
    Shutdown(0)
    Case $Check
    If GUICtrlRead($Check) = $GUI_CHECKED Then
    _WinAPI_ShutdownBlockReasonCreate($hForm, 'This application is blocking system shutdown because the saving critical data is in progress.')
    Else
    _WinAPI_ShutdownBlockReasonDestroy($hForm)
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_QUERYENDSESSION($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam

    [/autoit] [autoit][/autoit] [autoit]

    Switch $hWnd
    Case $hForm
    If _WinAPI_ShutdownBlockReasonQuery($hForm) Then
    Return 0
    EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_QUERYENDSESSION

    [/autoit]

    Edit Oscar: AutoIt- und Spoilertags hinzugefügt.

    2 Mal editiert, zuletzt von Oscar (8. März 2014 um 18:54)