Mona pplication empèche la fermeture de Windows

cs_f6dqm1 Messages postés 62 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 25 mai 2013 - 8 févr. 2007 à 17:02
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 10 févr. 2007 à 14:52
Bonjour
J'ai écrit une application Delphi qui empèche la fermeture de Windows si cette application tourne.
Si je fais Arrèter, l'écran passe en sombre puis revient automatiquement en normal avec focalisation sur mon application.


Je dois absolument fermer mon application pour fermer Windows.
Pourtant cette application se ferme normalement par  Ctl/Alt/Sup et fin de tâche.
J'ai d'autres applications Delphi pour lesquelles ce phénomène n'apparait pas.
Quelqu'un a t'il une idée du problème ?

Gabriel

13 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
8 févr. 2007 à 20:49
eteint l'ecran ...

un p'tit bout de code en passant ?

<hr size="2" width="100%" />Croc (click me)
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
9 févr. 2007 à 09:05
Salut,

N'as-tu pas assigné à ta Form principale un évenement OnCloseQuery ou OnClose dans lequel tu n'autorises la fermeture qu'à certaines conditions ?

A +
Thierry
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
9 févr. 2007 à 14:21
ça sens le CanClose := false; en dur =)
+1 pour le bout de code pour voir un peu ;)
0
cs_f6dqm1 Messages postés 62 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 25 mai 2013
9 févr. 2007 à 15:06
Bonjour.
L'évènement OnClose de la fiche renvoie effectivement sur une procédure de fermeture de l'application qui libère toutes les ressources utilisées par le programme et sauvegarde le contexte de la dernière session ouverte.
Cette procédure de fermeture se termine par un "application.terminate".
Ce que je ne saisis pas très bien, c'est pourquoi un Ctrl/Alt/Sup + fin de tâche ferme le programme sans problème alors que Windows ne veut pas le fermer s'il est ouvert (que ce soit win98 ou XP)

Le programme fait plus de 15000 lignes de code et je ne vois pas très bien quelles lignes je pourrais vous soumettre !!!
Vous pouvez d'ailleurs le télécharger sur mes pages persos. Il s'appelle Sat_Explorer et est téléchargeable sur le lien suivant (il est gratuit) :
http://rivat.chez-tiscali.fr/logiciel.htm
A l'usage des personnes qui font de la poursuite satellites ...ou qui veulent voir la Station Spatiale Internationale briller dans le ciel lorsqu'elle passe au-dessus de la France ... Ce n'est peut-être pas la tasse de thé des lecteurs de ce forum !
Gabriel
0

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

Posez votre question
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
9 févr. 2007 à 15:12
http://rivat.chez-tiscali.fr/logiciel.htm = lien mort.
moi je demande a voir les procedures : OnClose, OnCloseQuery, OnDestroy et la procedure du bouton/menu qui lance la fermeture.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
9 févr. 2007 à 16:22
Salut,

Essaie en supprimant le 'Application.Terminate' dans ta procédure de fermeture qui est inutile (voire nuisible) puisque cette procédure est appelée dans l'événement OnClose de ta form principale.
0
cs_f6dqm1 Messages postés 62 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 25 mai 2013
9 févr. 2007 à 16:55
1000 excuses pour le lien : je ne me suis pas encore fait au changement de Tiscali en Alice !!!
http://rivat.chez-alice.fr/logiciel.htm

Le application.terminate est nécessaire car sur le OnClose j'ai été obligé de mettre un action:=none avant d'aller dans ma procédure de fin de programme sinon j'avais des pbs.
J'ai essayé d'enlever le action:=none mais ça ne change rien.
L'action sur la petite croix de fermeture de la fenêtre principale fonctionne très bien.
L'évènement OnClose ne contient que 2 instructions :
action:=none;
menuquitter.click;

La procédure menuquitter.click fait plein de trucs comme je l'ai écrit avant et se termine par application.terminate.. Et tout ça marche normalement sauf qu'un jour un utilisateur a voulu fermer Windows sans fermer Sat_Explorer et s'est étonné de voir que Windows ne voulait pas se fermer ! (Ce que je n'avais pas remarqué moi-même !)
Ce qui serait intéressant de savoir c'est que fait Windows avec les applications qui tournent lorsque l'on fait Démarrer/Arrèter ?
Gabriel
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
9 févr. 2007 à 17:05
Il clic à ta place sur la croix =)
Crée une nouvelle appli. Dans le onClose, ecrit "Action := caNone;", fait F9 et clic la croix pour fermer : ça ne se ferme pas.
Je ne comprends pas l'interet de mettre action := canone puis d'appeler une proc.
Autant mettre le contenu de la proc dans le OnClose non ?
Ce que je mets dans le OnCloseQuery c'est "CanClose := MessageDialog(..)=mrYes" tu vois ? et si on réponds "oui" alors le OnClose est executé.
me suis fait comprendre ? ai je fais des erreurs moi aussi ? ^^
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
10 févr. 2007 à 05:00
"Cette procédure de fermeture se termine par un "application.terminate"."



RHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!

<hr size="2" width="100%" />Croc (click me)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
10 févr. 2007 à 05:15
sinon pour repondre a ta question : "que fait windows avec les applications quand on quitte windows" :

1 ) windows envois un "ferme toi" a l'appli, en gros, elle transmet un message de fermeture qui declanche donc les OnCloseQuery et OnClose.

2 ) si l'application mets trop de temps a se fermer, windows attend par defaut 20 secondes avant de faire un killprocess sur l'application.
il en est de meme pour tout les services et applications.
donc la fermeture de windows peu s'averrer trés trés trés longue si les programmes encore ouvert tardent a repondre a la requette de fermeture.

3 ) en cas de probleme avec une application qui ne veut pas se fermer, windows, selon la configuration, peu soit ignorer le probleme et se fermer ou cas par defaut revenir au systeme afin que l'utilisateur fassent les manipulations manuellement.
bien sur, cet etat n'est pas indiqué par un quelquonque message d'avertissement.

mais le probleme, ne viens ni de l'application, ni du systeme, mais comme d'habitude des mauvaises manipulation de l'utilisateur qui est trop faignant pour aller fermer les appli ... c'est vrai que 3 click de souris au bon endroit c'est relativement fatiguant et nous fait depenser facilement 0.0001e-4000 calories pour chaque click de souris. aprés cela, on peu malheureusement trouver des utilisateurs en pleine forme devant leurs PC. ce qui est grave quand a l'avenir de l'informatique familliale.
imaginons que cela peu arriver a des enfants qui deja bien nourris peuvent devenir obese tellement cette manipulation et eprouvante pour leurs petit metabolisme si fragile.

un autre point ou je trouve que bloquer la fermeture d'une application de maniere systematique est un trés mauvais concept de programmation.
j'ai deja eu le cas ou j'avais besoin de sauver certaines informations avant la sortie de l'appli et celle ci c'est resumée une sauvegarde de ces parametres aprés modification cad pendant l'utilisation et non aprés la demande de fermeture.
dans d'autre cas, je verifie la modification avec un booléen puis je sauvegarde en concequence avec ou non une confirmation visuelle avec choix Oui/Non ...
c'est beaucoup plus pratique et plus explicite pour l'utilisateur. aprés c'est au developpeur de faire en sorte que la sortie de l'application soit la plus rapide possible ... il n'y a rien de plus CHIANT qu'un logiciel qui mets 40 ans a se fermer (ce qui se resume a un killprocess au bout d'un temps because ras le cul), surtout quand il n'y a pas de progression VISUELLE de la tache en cours (donc on attend comme un con en se demandant ce que l'appli fout a gratter comme une bourrine sur le disque dur).

<hr size="2" width="100%" />Croc (click me)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
10 févr. 2007 à 05:21
d'ailleur, n'est - ce pas Lao Tze ou Nishida Kitarô qui as dit :

"si trop longue est une routine de ton application, mets une barre de progression".

le tout arrosé de saké et de sushi.

<hr size="2" width="100%" />Croc (click me)
0
cs_f6dqm1 Messages postés 62 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 25 mai 2013
10 févr. 2007 à 08:29
Bonjour
C'est vrai qu'on peut répéter le contenu du menu quitter dans le OnClose et supprimer le action:=canone mais ça ne change absolument rien au problème; j'ai essayé. Même en faisant ça, l'application empèche Windows de se fermer.
Quand à le durée de fermeture de mon appli, elle dure 2 secondes maximum, le temps d'aller libérer les ressources et d'écrire sur le DD le contexte dans un fichier Texte.
Ceux qui ont eu la curiosité de télécharger le prog ont probablement pu vérifé celà.

Je suis d'accord avec le fait qu'il vaut toujours mieux fermer ses applis proprement avant de quitter Windows mais il a toujours des utilisateurs qui fatiguent à cliquer 2 fois et ensuite vont critiquer un logiciel GRATUIT en imaginant des 'bugs' !

Pour en revenir au problème initial (je ne veux pas parler de 'bug'), il est sûr que Windows ne réagit pas de la même façon lorsqu'il ferme les applis en s'arrètant que lorsqu'il les ferme par la croix, par Alt+F4 ou par Ctrl+Alt+Sup + fin de tâche puisque ces trois derniers cas fonctionnent correctement.

J'ai essayé d'ouvrir plusieurs applis en même temps et de quitter Windows.
Windows a fermé dans l'ordre d'ouverture les applis les unes après les autres puis lorsqu'il est arrivé sur la mienne, il a avorté son process de fermeture et  a laissé les dernières applis ouvertes !!!
Vraiment curieux ...
Gabriel
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 févr. 2007 à 14:52
Salut,

Normalement seul un WM_QueryEndSession avec un Result à 0 peut empêcher windows de se fermer

Regarde ici pour un exemple
 
@+
Cirec

<hr size="2" />
0
Rejoignez-nous