Détecter un arrêt de Window ou une fermeture de Session.

Partagez votre expérience de PureBasic avec les autres utilisateurs.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Détecter un arrêt de Window ou une fermeture de Session.

Message par nico »

Code : Tout sélectionner

;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 15/11/04
;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             
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Génial, je vais tester ça :-).
Répondre