Obtient la cha�ne contenant la raison d�finie par la fonction _WinAPI_ShutdownBlockReasonCreate()
#include <WinAPISys.au3>
_WinAPI_ShutdownBlockReasonQuery ( $hWnd )
$hWnd | Handle de la fen�tre principale de l'application. |
Succ�s: | Retourne la cha�ne contenant la raison. |
�chec: | D�finit @error <> 0. |
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.
Consultez ShutdownBlockReasonQuery 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