Fermer proprement un programme qd windows se ferme

Résolu
cosmobob
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
- 16 févr. 2005 à 18:21
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
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

30 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
16 févr. 2005 à 23:17
ah non, tu n'as que WM_QUERYENDSESSION de garanti, traite ici.

ciao...
BruNews, MVP VC++
0
cosmobob
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
16 févr. 2005 à 23:46
pourquoi mettre le code de terminaison a cet endroit si ca ne signifie
pas a coup sur que le programme va se terminer ?? alors que si le
programme se ferme, il y aura forcément un WM_ENDSESSION.

non ?
0
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

17 févr. 2005 à 05:35
Il faut mettre le code de terminaison a cette endroit, car c'est avec cela que windows annonce qu'il va se fermer et que toutes les applications doivent en faire autant avt. Si tout est bien fait si aucune application ne fige ou refuse de repondre alors le system poursuit la fermeture avec WM_ENDSESSION.
Effectivement, il existe qq possibilité que ton appli se ferme pour rien (car une autre n'aura pas repondu correctement et tu n'y pex rien) et que la procedure de fermeture soit avortée. Mais, cela n'est plus ton pb et tu n'en est pas responsable. C'est qu'une des application qui tourne sur le PC est planté ou mal programmé.

Bon courrage.
0
cosmobob
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
17 févr. 2005 à 12:00
ben moi jsuis pas convaincu, les applications ne se terminent pas,
elles sont terminées, c'est différent... une application qui recoit
WM_QUERYENDSESSION peut ne pas etre terminée par la suite (cf msdn;
alors rien ne sert d'executer un quelconque code, l'application va
potentiellement rester en vie), alors qu'une qui recoit WM_ENDSESSION
va être terminée a coup sur. en+ toutes les applications qui vont etre
terminées vont recevoir WM_ENDSESSION.... donc aucun interet a executer
le code ds WM_QUERYENDSESSION...



non??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

17 févr. 2005 à 13:22
Telque je vois les choses, le sytem annonce qu'il va s'arreter et previent toutes les applications qu'il va s'arreter. Elles executent alors les instructions necessaire avant de se terminer, elles ont alors tous le temps necessaire pour accomplire leur tache sauvegarder tout ce qu'elles ont on a sauvegarder.... Tant qu'elles ne retourne rien le sytem patiente avant de finir la procedure.
Ensuite le sysem poursuit l'arret eet envoi endsession et la plus rien a faire la procedure est enclenche si ton appli a pas le tps de finir ce qu'elle avait a faire, le system s'en fiche et s'arrete.
0
cosmobob
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
17 févr. 2005 à 13:34
j'ai testé, t'as tout le temps pour traiter le WM_ENDSESSION (testé
avec une dialogbox ...), si aucun code ne pouvait etre executé dedans,
le message ne serait jamais envoyé....
0
cosmobob
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
17 févr. 2005 à 13:36
ce qui m'ennuie c'est que t'as l'air si sur de toi alors que tu te
bases sur msdn (comme moi, et encore as tu tout bien lu?) et que tu
n'as pas fait de test... si tu t'es déja servi véritablement de ca,
alors ok, mais sinon ... j'attends pas une réponse d'astrologue,
j'attends un truc pseudo officiel.
0
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

17 févr. 2005 à 15:57
Il ne s'agit nullement de voyance. Je te dit simplement ce que moi je lis et je comprend de mes connaissances, apres...

Tu a raison du le faite que WM_ENDSESSION te permet de traiter autant de tps que tu veux ensuite cf :
If the wParam parameter is TRUE, the session can end any time after all applications have returned from processing this message. Therefore, an application should perform all tasks required for termination before returning from this message.

Par contre on a aussi :
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.

Apres j'ai pas tout lu MSDN c'est sur, j'ai deja tout lu Freud (de la main gauche bien sur) alors....

Bon courrage.
0
cosmobob
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
17 févr. 2005 à 16:09
fallait continuer à lire, dans ce que tu as cité, juste apres:


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



autrement dit si une seule application return FALSE, WM_ENDSESSION n'est pas envoyé et les prog sont pas terminés.

non?
0
yserver
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

17 févr. 2005 à 16:24
Ta remarque est vrai mais je n'est pas relevé car n'est valable que sur les postes en w9x.
Comme perso j'ai pas dans mon entourage des poste en 9x, et moi encore moi, comme en plus ca represente trop peut de poste en pourcentage. J'ai tendance a vite évacuer les remarque qui concerne autre chose que win NTx.
0