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

Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
- - Dernière réponse : yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
- 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

20/30 réponses

Meilleure réponse
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
3
Merci
donc mieux vaut mettre le code de terminaison dans le WM_ENDSESSION, non??

Merci cosmobob 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cosmobob
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
936
Date d'inscription
dimanche 1 avril 2001
Dernière intervention
9 janvier 2012
0
Merci
WM_DESTROY

@+
Arnotic,
Admin CS, MVP Visual C++
Commenter la réponse de cs_Arnotic
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
936
Date d'inscription
dimanche 1 avril 2001
Dernière intervention
9 janvier 2012
0
Merci
dans WM_DESTROY on y passe forcement aussi.

@+
Arnotic,
Admin CS, MVP Visual C++
Commenter la réponse de cs_Arnotic
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
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
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
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
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
17 septembre 2012
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
203
Date d'inscription
lundi 2 août 2004
Dernière intervention
8 septembre 2006
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Dernière intervention
27 janvier 2009
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
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
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.