UDF > WinAPIEx > System > Administration >


_WinAPI_ShutdownBlockReasonCreate

Indique que le système ne peut pas être arrêté et définit la raison qui sera affichée à l'utilisateur si l'arrêt du système est demandé

#include <WinAPISys.au3>
_WinAPI_ShutdownBlockReasonCreate ( $hWnd, $sText )

Paramètres

$hWnd Handle de la fenêtre principale de l'application.
$sText La chaîne qui explique la raison pour laquelle l'application doit bloquer l'arrêt du système.

Valeur de retour

Succès: Retourne True
Échec: Retourne False

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).

Les applications doivent appeler cette fonction quand elles commencent une opération qui ne peut être interrompue, comme la gravure d'un CD ou d'un DVD. Lorsque l'opération est terminée, appelez la fonction _WinAPI_ShutdownBlockReasonDestroy() pour indiquer que le système peut être arrêté.

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

En relation

_WinAPI_ShutdownBlockReasonDestroy

Voir aussi

Consultez ShutdownBlockReasonCreate 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