Evenement programme arreté par windows

Résolu
Signaler
Messages postés
49
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
13 février 2008
-
Messages postés
49
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
13 février 2008
-
Rebonjour,

voila, j'ai un programme qui est arreté par windows a chaque fin de session, je veux dire que ce n'est pas moi qui l'arrete manuellement, et j'ai besoin que le programme effectue une action au moment meme ou windows arrete le programme.
Seulement, je ne vois pas quel evenement je dois intercepter pour cela, si toutefois cela est possible.

J'ai essayé Form.close mais cela ne fonctionne pas.
Avez-vous d'autres idées?

Merci d'avance

60 réponses

Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Mets un ShowMessage dans le OnClose.

cantador
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Salut,

Et  OnCloseQuery ?
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Le OnCloseQuery permet de définir les conditions dans lesquelles le OnClose
s'exécute.

cantador
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
En fait, si tu mets fin au processus avec le gestionnaire des tâches par exemple, rien ne sera exécuté, effectivement.

Pour fermer proprement, il faut mettre fin à la tâche ( Onglet Application du gestionnaire et non pas onglet Processus ).

D'ailleurs tu as bien un message d'avertissement en mettant fin au processus, ce qui n'est pas le cas quand tu mets fin à la tâche.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
... Et tu as le droit (le devoir!) de cocher "Réponse acceptée" sur ta solution.

     Ce fut un plaisir de t'aider!      
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
C'est WM_QUERYENDSESSION qu'il convient de traiter, l'autre est la notif de dernière urgence sur laquelle le système n'attendra pas la fin de tes travaux.

ciao...
BruNews, MVP VC++
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
Par contre evite les traitements lourd quand le systeme ferme ton appli en fin de session car
windows XP tue ton processus au bouts de 20 secondes (par defaut)
beaucoup de gens, moi par exemple fixe la limite a 5 secondes maxi.

donc ton traitement de fin doit etre trés trés rapide. genre de pas calculer une fractale 3D avec raytracing en temps réel.

<hr size="2" width="100%" />
http://deefaze.gnomz.com
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
salut,

as-tu fermé ton fichier après avoir écrit dedans?

si oui, peux-tu copier le code que tu utilise pour écrire dans le fichier?  (inclue ouverture du fichier et type du fichier)

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
"oui bien bien sur je ferme le fichier" :-D. (C'est pas évident pour tout le monde.)

ça m'as l'air correct....

et sans le showMessage box? ça marche?

PS: use Try Finally

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Essaie ça. Ca devrait marcher.



procedure TForm1.WMQUERYENDSESSION(var Msg : TWMQueryEndSession);
var    f:TextFile;
begin
if not(FileExists('Dates.txt')) then exit;
AssignFile(f,'Dates.txt'); //Fichier ds le répertoire de l'appli.
Append(f);
Writeln(f,'J''ajoute un truc à la fin du fichier.');
Flush(f);  {Pour que le texte soit réellement écrit dans le fichier }
CloseFile(f);
inherited;
end;
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Salut cari..

Si avec le flush ça ne marche pas, alors y'aura vraiment un truc...
A noter que dans PostitForEver, je ne l'utilise pas.. je lance une procédure
qui écrit dans un fichier .ini.

cantador
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Moi zossi 
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Pour la suite, faut prendre un avatar..

cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
non, prendre une jolie image pour te représenter au lieu
du point d'interrogation à la noix..

cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
J'ai pas tout regardé mais juste un truc à chaud :
Timer1.Destroy;

me semble suspect..

cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Autre chose, il manque du code car on a pas la procédure qui lance le timer.

cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Je crois que tu as trouvé ton souci.

cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Le timer est enable := true par défaut.
il faut mieux écrire donc:
timer.enable := false
timer.enable := true
pour l'activer
et
timer.enable := false pour l'arrêter

cantador
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
C'est que sa propriété "enabled" est à true dans l'inspecteur d'objet (valeur par défaut).

Au passage, pour désactiver un composant Timer, il faut mettre sa propriété Enabled à  false et non pas le détruire. On n'est pas chez les sauvages chez Delphi.   

Je suppose que l'heure écrite dans ton fichier est l'heure de FIN... Pourquoi ne pas simplement inscrire l'heure de début dans l'événement onActivate de ta form? Je ne comprends pas l'utilité de ce Timer.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
héhéhé...
Ca se bouscule au portillon !  ;)