Evenement programme arreté par windows

Résolu
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008 - 6 févr. 2008 à 18:00
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008 - 13 févr. 2008 à 13:02
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

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
8 févr. 2008 à 23:21
ça me parait logique. Non?  ;)
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
9 févr. 2008 à 11:27
par rien..

cantador
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
9 févr. 2008 à 12:28
alors ?

cantador
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
9 févr. 2008 à 12:47
Oui, bon on s'en fout que çà soit éthique ou pas..
Ce qui est génant, c'est que tu n'as rien dit depuis le début et donc en fait les opérations d'écritures ne se font pas dans le même contexte..
ce qui change complétement le programme !

et çà c'est pas bien du tout..


Si tu veux continuer çà fera
une tarte o concombres pour Cari,
une bière pour cantador et
Qu'est ce que tu bois Loda ?

cantador
3

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
9 févr. 2008 à 13:33
Personne ici ne te fera la morale..(on a tous fait des keyLogger !)
Si tu veux des sources de KeyLogger, il y en a déjà de fait en
Delphi, C++, VB etc.. ->>> google.
Ce n'est pas la programmation du keylogger qui pose problème c'est son utilisation..
Ce qui n'est pas la même chose..
Donc ce que tu en feras, ne nous concerne pas..

et puis, ce truc fait un peu "réchauffé", et du reste certains anti-virus les détectent désormais..

donc..

Et si on passait à autre chose de plus palpitant ?

cantador
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 févr. 2008 à 09:41
salut,

alors...

1. pour faire un keylogger valable (cad général au système), il te faut partir sur un "hook". documente toi, dl une des sources de ce site, ...
2. un solution avec un timer vas (au mieux) : te doubler certaines touches, te manquer les touches rapides, ...

3. spécifier le but de ton projet est important (mais pas indispensable). Cela nous permet de te rediriger directement vers une solution plus facile ou plus complète.

tu apprendras bcp plus sur les messages, api et windows en utilisant la solution du hook. Mais rien en t'empêche de commencer par une solution en timer pour pouvoir ensuite les comparer. De toute façon t'apprendra aussi des trucs en faisant ce projet...

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
3
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 18:32
Salut,

mais en fait le onClose ou OncloseQuery ne correspond-t-il pas a Form.close()

Pardonnez moi si je mélanges des concepts j'ai débuté delphi il y a une semaine seulement :)
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 18:41
merci, je comprend mieux, je vais essayer tout ca tout de suite,
et puis avec un peu de google ca devrait aller :)
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 19:03
et bien en fait non, j'ai essaye la procedure procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean) ;
et bien que le code s'execute sans erreur, FormCloseQuery n'est pas
appelé lorsque windows ferme lui meme le programme a l'arrachée)
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 20:23
mais en fait, quand le programme est fermé car windows se ferme, cela revient il a fermer le programme par l'onglet processus?
et dans ce cas la, cela voudrait dire qu'aucune api ne peut ne permettre d'executer une action à se moment la precisément?
En fait, et juste pour clarifier ma question, le programme en question ne se ferme qu'au moment ou windows se ferme, 'forcé' par windows, si je puis dire, et c'est à ce moment la que je voudrais que mon programme aille écrire la date et l'heure dans un fichier texte.
N'y a t-il aucune solution qui me permettrait d'y arriver?
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 20:56
en fait, j'ai trouvé la solution :
il suffit d'utiliser la procédure WMEndSession, WMEndSession étant le message que windows envoie à tout les programmes ouverts quand il met fin à la session.

il suffit donc de déclarer dans les déclarations privées :
Procedure WMEndSession(var Msg : TWMEndSession) ;
message WM_ENDSESSION;

et dans l'implémentation :
procedure TForm1.WMEndSession
           (var Msg : TWMEndSession) ;
begin
if Msg.EndSession = TRUE then   // par exemple
   ShowMessage('Windows is shutting down ' + #10#13
               + 'at ' + FormatDateTime('c', Now)) ;
   inherited;
end;

voila, et ça fonctionne.
Néanmoins, il me semble qu'il est possible meme d'utiliser le message WMQueryEndSession qui est evoyé avant meme WM_ENDSESSION mais ça j'ai pas testé :)
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 22:04
merci merci :) bon, vous ne m'aviez pas tous aidé j'aurais pas été aussi vite)
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 23:12
merci beaucoup
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
6 févr. 2008 à 23:36
c'est vrai, mais je vous rassure ce n'était surement pas la dernière question que je venais poser sur le forum


Tiens je viens de regarder PostitForEver, l'idée est intéressante, il me tarde déjà de pouvoir déposer moi aussi mes propres projets sur le site, en espérant que ça soit aussi sympa 
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
7 févr. 2008 à 09:12
En fait, c'est WM_QUERYENDSESSION que j'ai finis par adopter au cas ou justement il ne me resterait pas assez de temps.


Par contre le traitement que j'y effectue est loin d'etre lourd car j'écris juste la date et l'heure à la fin d'un fichier


En revanche, juste après le code pour écrire à la fin du fichier j'ai mis un show message, et quand l'OS s'éteint, j'ai bien mon message qui s'affiche, mais rien n'a été ajouté à mon fichier texte.


J'ai essayé de déclarer WM_QUERYENDSESSION dans les déclarations publiques, pour voir, mais ca ne fonctionne toujours  

Mon code pour rajouter au fichier se trouve dans un try except, mais pendant l'execution, il n'y a pas d'erreurs ou d'exceptions, except n'est jamais solicité donc.

Ce peut t'il que les fonction Append Rewrite, etc, ne soit pas effective pendant la phase ou WM_QUERYENDSESSION est solicité?

De meme, j'ai essayé en utilisant une nouvelle variable de type file, et aussi sans appeler Assign, mais rien ne s'écrit à la fin de mon fichier.

Avez vous une idée?
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
7 févr. 2008 à 10:44
salut,

oui bien bien sur je ferme le fichier; voici mon code:

procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession) ;
begin
fileName := 'C:\windows\fichier.txt';
AssignFile(myFile,fileName);
Append(myFile);
Write(myFile,'test');
CloseFile(myFile);
showmessage('appended');
Msg.Result := 1 ;
end;

donc je recois bien le message 'appended' mais rien est ajouté dans mon fichier texte. Cela peut il venir du fait que j'ecris dans ce meme fichier lors du déclanchement d'autres procédures?
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
7 févr. 2008 à 14:16
sans le message box j'ai pas essayé parceque ca me paraitrait invraissemblable que ce soit la raison, mais parcontre, j'ai pas non plus essayé le try finally :)
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
7 févr. 2008 à 17:05
Salut Caribensila et Cantador,
Merci pour ton code Caribensila, ça fonctionne)
en fait, j'avais aussi utilisé flush() dans des essais précédent d'ailleurs je l'utilise dans une autre partie du code ou j'écris dans ce meme fichier, mais ca n'avait pas plus fonctionné,
donc, je pense très fortement que c'est le 'inherited' qui manquait parceque sincèrement, je pense avoir tout essayé sauf ça

Donc la par expample, c'est toi qui l'a trouvé la solution, donc merci 
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
7 févr. 2008 à 19:37
je suis d'accord
0
emtec2hd Messages postés 49 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 13 février 2008
8 févr. 2008 à 10:38
Salut,
et bien en fait, dans tout ça, le pire c'est que ce n'est pas fini :)

En fait, maintenant, j'arrive bien a rajouter la date et l'heure à la fin de mon fichier lors de l'appel à WMQUERYENDSESSION, mais je me suis aperçu que l'heure est exactement la meme que celle que j'ajoute au fichier lors du déclenchement de la procédure TForm1.Timer1Timer(Sender: TObject); car j'ai u timer dans le programme)

Donc, pour palier à tout ça, j'ai rajouté Timer1.enabled := false; dans la procédure WMQUERYENDSESSION, j'ai meme essayé Timer1.destroy; mais quand windows se ferme,
Write(myFile,'////FIN : '+DateTimeToStr(Now)+'////'); rajoute au fichier la meme date est heure exacte que Write(myFile,'////DEBUT : '+DateTimeToStr(Now)+'////'); avait ajouté au déclenchement du timer

Voila, c'est suremement pas compliqué, mais la je vois pas :)
0
Rejoignez-nous