Fermer proprement un programme qd windows se ferme [Résolu]

cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 18:21 - Dernière réponse : yserver 203 Messages postés lundi 2 août 2004Date d'inscription 8 septembre 2006 Dernière intervention
- 17 févr. 2005 à 16:24
bonjour,

comment faire pour qu'une application se termine proprement (cad en lui
faisant executer le code que l'on veut) quand windows se ferme?

un message est-il envoyé à tous les programmes ... ? dans ce cas comment l'interpreter?



merci
Afficher la suite 

Votre réponse

30 réponses

Meilleure réponse
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 23:06
3
Merci
donc mieux vaut mettre le code de terminaison dans le WM_ENDSESSION, non??

Merci cosmobob 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de cosmobob
yserver 203 Messages postés lundi 2 août 2004Date d'inscription 8 septembre 2006 Dernière intervention - 16 févr. 2005 à 18:56
0
Merci
oui un message est envoyé a tous les programmes leur demandant de se fermer. Ca c'est une certitude. Par contre si je connais tres bien windows, je connais moins bien le c par contre, mais il me semble que le vontol qui est envoyé au prog est le même que celui qui est adresse lorsque tu clic sur la croi, pour fermer la fenetre. Donc tu a rien de plus à faire puisque normalement tu a éjà traiter ce msg dans la boucle de traitement et c'es le même

D'autre te confirmeront pour le msg qui est posté lorsque que tu ferme windows, et en meme tps je m'instrurais

Bon courrage.
Commenter la réponse de yserver
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 19:04
0
Merci
salut,

non c'est pas le message la, j'avais déja testé. (en mettant un
messagebox qd on clique sur la croix, ca s'affichait pas qd on ferme
windows).



en fait j'ai trouvé par moi meme, windows envoie WM_QUERYENDSESSION et
la fenetre doit alors retourner 0 pour dire qu'elle traite ce message.

c'etait chiant pour tester, obliger de rebooter a chaque fois ...

a++
Commenter la réponse de cosmobob
cs_Arnotic 936 Messages postés dimanche 1 avril 2001Date d'inscription 9 janvier 2012 Dernière intervention - 16 févr. 2005 à 19:09
0
Merci
WM_DESTROY

@+
Arnotic,
Admin CS, MVP Visual C++
Commenter la réponse de cs_Arnotic
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 19:19
0
Merci
quoi WM_DESTROY ? a ce que j'ai compris c'est WM_ENDSESSION qui est
envoyé. Si quelqu'un pige prquoi ya WM_QUERYENDSESSION qui est envoyé
avant, ca serait bien de l'expliquer ici.

merci
Commenter la réponse de cosmobob
cs_Arnotic 936 Messages postés dimanche 1 avril 2001Date d'inscription 9 janvier 2012 Dernière intervention - 16 févr. 2005 à 19:23
0
Merci
dans WM_DESTROY on y passe forcement aussi.

@+
Arnotic,
Admin CS, MVP Visual C++
Commenter la réponse de cs_Arnotic
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 19:27
0
Merci
et bien non. je viens de tester, j'y passe ni a la fermeture normale du
prog, ni qd windows se ferme. WM_DESTROY est envoyé uniquement lors
d'un appel explicite à DestroyWindow.

alala...
Commenter la réponse de cosmobob
yserver 203 Messages postés lundi 2 août 2004Date d'inscription 8 septembre 2006 Dernière intervention - 16 févr. 2005 à 19:33
0
Merci
pour faire tes test comme ca car effectivement rebooter la becanne tout le tps c'est gonflant, je te conseil vmware pour emuler des machines. Il existe en version d'evaluation limité ds le tps, qui peut te dépanner de tps en tps

Bon courrage.
Commenter la réponse de yserver
yserver 203 Messages postés lundi 2 août 2004Date d'inscription 8 septembre 2006 Dernière intervention - 16 févr. 2005 à 19:39
0
Merci
Au vu des inforamtion du topic, voila ce que j'ai trouvé sur MSDN

WM_ENDSESSION
WM_QUERYENDSESSION

ca se trouve ICI http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/system_shutdown_messages.asp
Commenter la réponse de yserver
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 16 févr. 2005 à 19:40
0
Merci
Salut,
moi je comprend msdn comme ca:
- WM_QUERYENDSESSION: demande a l'app si la session peut se terminer (on peut retourner 0 pour empecher la fin de la session)
- WM_ENDSESSION: informe l'app que la session se termine, c'est la qu'il faut executer le code "pour quitter proprement".

à tester ...
Commenter la réponse de cs_aardman
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 20:08
0
Merci
ouais j'ai vu ca, mtnt j'ai retourné 0, et la session se ferme qd
meme.... donc ca doit ptet servir a avoir un dela supplementaire...

si quelqu'un s'en est déja servi avant et sait déja tout ca...
Commenter la réponse de cosmobob
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 16 févr. 2005 à 20:25
0
Merci
Le systeme se fout du retour de WM_ENDSESSION, executer le code de terminaison dans
WM_QUERYENDSESSION est le meilleur choix possible.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 20:27
0
Merci
ok, mais apres avoir lu msdn, est ce sur que WM_QUERYENDSESSION soit envoyé a tous les processus?? WM_ENDSESSION oui en tout cas
Commenter la réponse de cosmobob
yserver 203 Messages postés lundi 2 août 2004Date d'inscription 8 septembre 2006 Dernière intervention - 16 févr. 2005 à 20:35
0
Merci
Pour moi il ne fait aucun doute que WM_QUERYENDSESSION est envoyé a toutes les applications, et que WM_ENDSESSION n'est envoyé qu'ensuite si et seulement si aucune application n'a retourné 0.

Bon courrage
Commenter la réponse de yserver
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 21:13
0
Merci
pourtant msdn dit:

"The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero"

moi je comprends ca comme: il n'est pas sur que WM_QUERYENDSESSION soit
envoyé a tout le monde, mais je pense que dans le cas ou des programmes
ne le recoivent pas, alors le systeme ne va pas se fermer. Autrement
dit, on est sur que le systeme va se fermer quand on recoit
WM_ENDSESSION, donc mieux vaut peut etre plutot mettre le code de
terminaison dedans...

non ?? car une appli pourrait recevoir WM_QUERYENDSESSION sans que le
systeme ne se ferme (si une autre appli retourne 0; enfin chez moi j'ai
beau retourner 0 ca se ferme qd meme... ;)

qu'en pensez vous?
Commenter la réponse de cosmobob
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 21:18
0
Merci
"When an application returns TRUE for this message, it receives the
WM_ENDSESSION message and it is terminated, regardless of how the other applications respond to the
WM_QUERYENDSESSION message.

Windows Me/98/95: After all applications return TRUE for this message, they receive the
WM_ENDSESSION and they are terminated."



ha ben en+ ca a l'air de dépendre du systeme.... sur Me/98/95 à ce que
je comprends, on ne recoit pas a coup sur un WM_ENDSESSION apres un
WM_QUERYENDSESSION alors que sur os superieur oui...

bon je mets ou le code de terminaison alors ?
Commenter la réponse de cosmobob
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 21:24
0
Merci
brunews t'as pas écrit l'inverse de ce que tu voulais dire par hasard?? (permutation entre wm_endsession et wm_queryendsession)
Commenter la réponse de cosmobob
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 16 févr. 2005 à 21:31
0
Merci
WM_QUERYENDSESSION est envoyé aux progs alors que WM_ENDSESSION n'est jamais garanti, on est dependant de comment aura repondu un autre place devant dans la liste d'appels.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 16 févr. 2005 à 22:26
0
Merci
est que l'application peut etre fermée si WM_ENDSESSION
n'est pas envoyée?? je crois que non (cela signifierait que windows ne
va finalement pas se fermer), par contre, l'application peut ne pas
etre fermée meme si
WM_QUERYENDSESSION est envoyée non ?

bref ...
Commenter la réponse de cosmobob
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 16 févr. 2005 à 22:50
0
Merci
tout à fait mon avis, si on retourne 0 sur WM_QUERYENDSESSION, on ne recevra pas 'normalement' de WM_ENDSESSION car Windows aura stoppé le processus de terminaison, à part si un sauvage appelle ExitWindowsEx avec EWX_FORCE.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.