; Attention, ce code va nécessairement fermer vos applications en cours
; même si vous choisissez d'annuler la fermeture de la session ou de Window
; A noter que vous n'avez que quelques secondes pour agir et annuler l'opération.
; Donc cliquez sur NON dès l'affichage de la Boite de Dialogue!
; Il faut lancer ce code puis lancer une fermeture de Window ou un arrêt de window
; une boite de dialogue vous permettra d'annuler cette opération mais il faudra répondre
; au plus vite à l'affichage de cette boite!
; Nico
; Le 151104
; PureBasic 3.92
; Ce code permet de savoir si Window ferme la session en cours ou
; si l'ordinateur va s'éteindre et de prendre des mesures.
#ENDSESSION_LOGOFF = $80000000
Procedure ProcedureCallback(WindowID, Message, wParam, lParam)
Resultat = #PB_ProcessPureBasicEvents
Select Message
Case #WM_QUERYENDSESSION
If lParam = 0 ; Window se ferme
result = MessageRequester("Info", "Window est en cours d'arrêt, l'autoriser ?", #PB_MessageRequester_YesNo )
ElseIf lParam = #ENDSESSION_LOGOFF ; Fin de session
result = MessageRequester("Info", "Window va fermer cette Session, l'autoriser ?", #PB_MessageRequester_YesNo )
EndIf
If result = 6 ; Autorisation de Fermeture
; Si vous voulez faire une sauvegarde des données avant la fermeture
; la faire maintenant
ProcedureReturn #True
ElseIf result = 7 ; Annulation de Fermeture
ProcedureReturn #False
EndIf
EndSelect
ProcedureReturn Resultat
EndProcedure
Enumeration
#Window
EndEnumeration
If OpenWindow(#Window, 0, 0, 400, 400, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Pure Basic")
SetWindowCallback(@ProcedureCallback())
Repeat
EventID.l = WaitWindowEvent()
Select EventID
Case #WM_CLOSE
Quit = 1
EndSelect
Until Quit = 1
EndIf