Définit un ordre d'arrêt d'un processus par rapport aux autres processus du système
#include <WinAPISys.au3>
_WinAPI_SetProcessShutdownParameters ( $iLevel [, $bDialog = False] )
| $iLevel | La priorité d'arrêt. Le système arrête les processus de la valeur la plus haute de $iLevel à la plus basse. Les priorités d'arrêt la plus haute et la plus basse sont réservés pour les composants du système. Ce paramètre doit être dans la plage de valeurs suivantes: 0x0000-0x00FF - Réservé au système pour un arrêt en dernier. 0x0100-0x01FF - Réservé aux applications pour un arrêt en dernier. 0x0200-0x02FF - Réservé aux applications pour un arrêt "intermédiaire". 0x0300-0x03FF - Réservé aux applications pour un arrêt en premier. 0x0400-0x04FF - Réservé au système pour un arrêt en premier. Tous les processus commencent au niveau d'arrêt 0x0280. |
| $bDialog | [optionnel] Indique s'il faut afficher une boîte de dialogue pour proposer une nouvelle tentative à l'utilisateur, les valeurs valides sont: True - Affiche une boîte de dialogue de relance si le processus prend plus de temps que le délai imparti à l'arrêt. False - Termine directement le processus (par défaut). |
| Succès: | Retourne True |
| Échec: | Retourne False |
Consultez SetProcessShutdownParameters 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