Page 1 sur 1
[..] Instructions avant extinction/fermeture de session
Posté : jeu. 20 juin 2013 14:33
par leoleolth
Bonjour,
Comment peut-on effectuer une instruction (envoyer un mail dans mon cas) juste avant la fermeture d'une session ou l'extinction de l'ordinateur ?
Re: [..] instructions avant extinction/fermeture de session
Posté : jeu. 20 juin 2013 17:08
par TopXm
Hello
Via l'éditeur de stratégie (GpEdit.msc)
=> Param Windows
=> Script (Démarrage / Arret)
► Afficher le texteCapture GPEDIT
Re: [..] instructions avant extinction/fermeture de session
Posté : jeu. 20 juin 2013 17:43
par leoleolth
merci, mais est-il possible de faire tout ça dans le script ?
Re: [..] instructions avant extinction/fermeture de session
Posté : jeu. 20 juin 2013 18:04
par sylvanie
Bonjour
En bricolant à partir de ce post :
https://www.autoitscript.fr/forum/viewt ... ion#p47496
et en exploitant donc l'udf ci présente en PJ, j' ai ici une fenêtre qui s'enregistre à l'évènement de fermeture de session et qui écrit dans un fichier sur le bureau pendant 10 secondes (histoire de bien tester l'attente pendant la déconnexion), et ne rend la main à Windows quand le travail est fini :
► Afficher le texte
Code : Tout sélectionner
#Include <ButtonConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
If _WinAPI_GetVersion() < '6.0' Then
MsgBox(16, 'Error', 'Require Windows Vista or later.')
Exit
EndIf
Global $hForm, $Msg, $Button, $Check
$hForm = GUICreate('MyGUI', 200, 200)
$Button = GUICtrlCreateButton('', 73, 62, 54, 54, $BS_ICON)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 45)
GUICtrlSetTip(-1, 'Log off ' & @UserName)
GUIRegisterMsg(0x0011, 'WM_QUERYENDSESSION')
GUISetState()
; Set the highest shutdown priority for the current process to prevent closure the other processes.
_WinAPI_SetProcessShutdownParameters(0x03FF)
_WinAPI_ShutdownBlockReasonCreate($hForm, 'This application is blocking system shutdown because the saving critical data is in progress.')
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button
Shutdown(0)
EndSwitch
WEnd
Func WM_QUERYENDSESSION($hWnd, $Msg, $wParam, $lParam)
Switch $hWnd
Case $hForm
For $ind=1 to 10
FileWriteLine(@DesktopDir&"\Autoitdbg.txt","EXEC out "&@HOUR&"_"&@MIN&"_"&@SEC)
Sleep(1000)
Next
_WinAPI_ShutdownBlockReasonDestroy($hForm)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_QUERYENDSESSION
Je n'ai pas tester pour le cas du reboot. Si ça ne le fait pas, c'est à creuser ...
Après dans votre cas, rendez cette fenêtre invisible et le tour est joué
Re: [..] Instructions avant extinction/fermeture de session
Posté : ven. 21 juin 2013 15:14
par leoleolth
Merci.
Si dans ma boucle principale je mets une condition qui renvoie à une fonction que j'ai créé quand l'ordi s'éteint, comment dois-je faire ?
Ex:
Code : Tout sélectionner
While 1
If <l'ordi s'eteint ou la session se ferme> Then
_MaFonction()
EndIf
WEnd
Re: [..] Instructions avant extinction/fermeture de session
Posté : lun. 24 juin 2013 14:19
par sylvanie
Bonjour,
La philosophie de l'enregistrement à l'évènement de fermeture n'est pas exactement à considérer comme tel.
Il s'agit plutôt de "On veux me fermer alors je déclenche ceci".
Dans votre script , mettez
Code : Tout sélectionner
GUIRegisterMsg(0x0011, 'WM_QUERYENDSESSION')
_WinAPI_SetProcessShutdownParameters(0x03FF)
_WinAPI_ShutdownBlockReasonCreate($hForm, 'This application is blocking system shutdown because the saving critical data is in progress.')
après le GUISetState(). Si votre application n'est pas fenêtrée, alors créez une GUI invisible durant le moment où votre script attend la fermeture de session.
puis déclarez la fonction
Code : Tout sélectionner
Func WM_QUERYENDSESSION($hWnd, $Msg, $wParam, $lParam)
Switch $hWnd
Case $hForm
APPEL_A_VOTRE_FONCTION_DE_FIN
_WinAPI_ShutdownBlockReasonDestroy($hForm)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_QUERYENDSESSION
où vous constatez l'appel à "APPEL_A_VOTRE_FONCTION_DE_FIN"