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 )
$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. |
Succès: | Retourne True |
Échec: | Retourne False |
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.
_WinAPI_ShutdownBlockReasonDestroy
Consultez ShutdownBlockReasonCreate dans la librairie MSDN.
#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