Enregistre l'instance active d'une application pour le redémarrage
#include <WinAPIDiag.au3>
_WinAPI_RegisterApplicationRestart ( [$iFlags = 0 [, $sCmd = '']] )
| $iFlags | [optionnel] Les flags qui spécifient un événement lorsque l'application ne sera pas redémarrée. Ce paramètre peut être 0 ou une ou plusieurs des valeurs suivantes: $RESTART_NO_CRASH $RESTART_NO_HANG $RESTART_NO_PATCH $RESTART_NO_REBOOT |
| $sCmd | [optionnel] Les arguments de ligne de commande pour l'application lors de son redémarrage. La taille maximale de la ligne de commande que vous pouvez spécifier est de 2048 caractères. Si ce paramètre est la chaîne vide (par défaut), la ligne de commande précédemment enregistrée est retirée. |
| Succès: | Retourne 1. |
| Échec: | Retourne 0 et définit @error <> 0, @extended contient le code d'erreur HRESULT. |
Votre inscription initiale pour le redémarrage doit avoir lieu avant que l'application rencontre une exception non gérée ou qu'elle ne réponde plus. Vous pouvez ensuite appeler cette fonction à partir de l'intérieur de votre fonction de rappel de récupération pour mettre à jour la ligne de commande. Pour éviter un redémarrage cycliques, le système ne redémarre l'application que si elle est en cours d'exécution depuis 60 secondes minimum.
Si vous inscrivez une application pour le redémarrage et qu'elle rencontre une exception non gérée ou ne répond pas, l'utilisateur a la possibilité de redémarrer l'application; l'application n'est pas automatiquement redémarrée sans le consentement de l'utilisateur.
Cette fonction nécessite Windows Vista ou une version ultérieure.
Consultez RegisterApplicationRestart dans la librairie MSDN.
#include <APIDiagConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <WinAPIDiag.au3> #include <WinAPISys.au3> If Number(_WinAPI_GetVersion()) < 6.0 Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Requiert Windows Vista ou une version ultérieure.') Exit EndIf Global $g_iCount = 10 Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 300, 100) Local $idLabel = GUICtrlCreateLabel('L''application sera stoppée après '& $g_iCount & 'secondes.', 10, 43, 280, 14, $SS_CENTER) GUISetState(@SW_SHOW) If $CmdLine[0] And ($CmdLine[1] = '/crash') Then MsgBox(BitOR($MB_ICONWARNING, $MB_SYSTEMMODAL), 'Attention', 'L''application a été redémarrée après un arrêt anormal.', 0, $hForm) EndIf If Not @Compiled Then _WinAPI_RegisterApplicationRestart(BitOR($RESTART_NO_PATCH, $RESTART_NO_REBOOT), '"' & @ScriptFullPath & '" /crash') Else _WinAPI_RegisterApplicationRestart(BitOR($RESTART_NO_PATCH, $RESTART_NO_REBOOT), '/crash') EndIf AdlibRegister('_Countdown', 1000) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _Countdown() Local $iData #forceref $iData $g_iCount -= 1 If $g_iCount Then GUICtrlSetData($idLabel, 'L''application sera stoppée après '& $g_iCount & 'secondes.') Else Local $tData ; Arrêt forcé du script en raison d'une violation d'accès mémoire $tData = DllStructCreate('int', 0x12345678) $iData = DllStructGetData($tData, 1) EndIf EndFunc ;==>_Countdown