laetitiavincent
Messages postés61Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention19 janvier 2007
-
5 déc. 2006 à 15:27
laetitiavincent
Messages postés61Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention19 janvier 2007
-
6 déc. 2006 à 13:38
Bonjour tout le monde
Encore une question de ma part
je voudrais intercepter la fin de windows pour le mettre en suspent et lancer un programme avant de fermer windows.
J'arrive à mettre l'arrêt en suspent et fermer ensuite windows mais je n'arrive pas à mettre en écoute mon application afin qu'il détecte la fin de windows Quelqu'un pourrait me dire comment faire ou me dire où je pourrais trouver l'info ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 déc. 2006 à 16:07
Salut,
Dans la procédure WndProc de ta fenêtre, tu peux intercepter le message WM_QUERYENDSESSION. Pendant le traitement de ce message, tu lances ton programme et retourner 0. Il ne faut pas oublier de fermer aussitôt l'application qui lance le programme. C'est ce dernier qui se chargera de fermer Windows.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 5 déc. 2006 à 19:40
Eh bien tu fais ce que tu veux quand tu recois WM_ENDSESSION et c'est tout. Pourquoi veux tu appeler AbortSystemShutdown?
Il faut jsute que l'appel de ton programme soit bloquant. C'est facile a faire avec ShellExecuteEx et WaitForSingleObject
Dans ma fonction interrompre_arret, j'utilise AbortSystemShutdown(NULL);
avant de lancer mon programme.
Quand je ferme mon appli, il me fait bien la fonction interrompre_arret, et ca marche bien.
Mais quand je ferme windows ou quitte la session, il ne fait rien et ferme tout
laetitiavincent
Messages postés61Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention19 janvier 2007 5 déc. 2006 à 17:09
Oui mais justement dans mon prog, je mets bien un return 0 , comme tu peux le voir plus haut. Alors pourquoi ca ne marche pas ??????? A moins que ce n'est pas de ce return 0 que tu me parles ????
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 5 déc. 2006 à 17:25
Assure-toi que ta fenêtre reçoit bien le message WM_QUERYENDSESSION en ajoutant un MessageBox(). Dans certains cas ce message n'est pas envoyé pour forcer toutes les applications à se fermer.
laetitiavincent
Messages postés61Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention19 janvier 2007 5 déc. 2006 à 20:01
Tu as tout à fait raison. c'est plus logique.
Par contre, le problème est qu'apparemment mon programme ne recoit pas WM_ENDSESSION ! A moins que je ne l'utilise pas correctement .
Je peux l'utiliser comme cela ?
case WM_QUERYENDSESSION :
interrompre_arret();
return 0;
dans lequel ma fonction interrompre_arret(); lance le programme
laetitiavincent
Messages postés61Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention19 janvier 2007 5 déc. 2006 à 20:42
Oui mais je reviens donc à mon problème que mon prog ne recoit pas WM_QUERYENDSESSION
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
Il n'y a pas de MessageBox et l'arret n'est pas interrompu. Je suis sur que ma fonction interrompre_arret(); fonctionne car avec WM_DESTROY pas de problème.
Quelqu'un pourrait me dire comment je peux faire autrement ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 6 déc. 2006 à 00:33
Normalement, ton application devrait recevoir WM_QUERYENDSESSION. Il est probable que le mode Debug empêche la réception de ce message. Tu as essayé en mode Release?
laetitiavincent
Messages postés61Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention19 janvier 2007 6 déc. 2006 à 13:38
Bonjour
et merci pour votre aide pour tous ceux qui m'ont répondu
Juste pour vous dire que c'est bon avec WM_QUERYENDSESSION. En fait, je ne faisais pas de projet sous DevC++ etj'exécutais directement le main. Dans ce cas là, ca ne marche pas.
Voilà, avec un porjet c'est impeccable. Encore merci pour votre aide