UDF > WinAPIEx > System > Administration >


_WinAPI_ShutdownBlockReasonQuery

Obtient la chaîne contenant la raison définie par la fonction _WinAPI_ShutdownBlockReasonCreate()

#include <WinAPISys.au3>
_WinAPI_ShutdownBlockReasonQuery ( $hWnd )

Paramètre

$hWnd Handle de la fenêtre principale de l'application.

Valeur de retour

Succès: Retourne la chaîne contenant la raison.
Échec: Définit @error <> 0.

Remarques

Cette fonction peut seulement être appelée depuis le thread qui a créé la fenêtre spécifiée par le paramètre $hWnd, sinon, la fonction échoue et le code de la dernière erreur est ERROR_ACCESS_DENIED (5).

Cette fonction nécessite Windows Vista ou une version ultérieure.

Voir aussi

Consultez ShutdownBlockReasonQuery dans la librairie MSDN.

Exemple

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

If Number(_WinAPI_GetVersion()) < 6.0 Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Nécessite Windows Vista ou une version ultérieure.')
    Exit
EndIf

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

; Définit la priorité d'arrêt la plus élevée pour le processus en cours afin d'empêcher la fermeture des autres processus
_WinAPI_SetProcessShutdownParameters(0x03FF)

Local $iMsg = GUIGetMsg()
While $iMsg <> $GUI_EVENT_CLOSE
    Switch $iMsg
        Case $idButton
            Shutdown(0)
        Case $idCheck
            If GUICtrlRead($idCheck) = $GUI_CHECKED Then
                _WinAPI_ShutdownBlockReasonCreate($g_hForm, 'Cette application bloque l'arrêt du système car la sauvegarde des données critiques est en cours.')
            Else
                _WinAPI_ShutdownBlockReasonDestroy($g_hForm)
            EndIf
    EndSwitch
    $iMsg = GUIGetMsg()
WEnd

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

    If $hWnd = $g_hForm Then
        If _WinAPI_ShutdownBlockReasonQuery($g_hForm) Then Return 0
    EndIf
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_QUERYENDSESSION