emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 février 2008
-
6 févr. 2008 à 18:00
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202114 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202114 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 ?
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 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.
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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)
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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?
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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é :)
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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.
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?
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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 :)
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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
emtec2hd
Messages postés49Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention13 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 :)