Bonjours, j'aimerais savoir s'il est possible dans une application de detecter la fin de son processus/ou la fin d'execution de cette application?
Si oui comment peut on faire?
Merci
Bonjours, j'aimerais savoir s'il est possible dans une application de detecter la fin de son processus/ou la fin d'execution de cette application?
Si oui comment peut on faire?
Merci
Salut,
Si c'est toi qui lance cette application tu peux utiliser "createprocess", avec un "waitforsingleobject" pour détecter la fin.
@+.
En fait j'ai une application que je fait tourner en tache de fond, elle est executer au démarrage de windows, et je voudrais savoir s'il est possible d'executer des actions avant la fin de cette application. C'est a dire qu'elle détecte elle meme sa propre fermeture?Existe-t-il un evenement windows a controler??
Merci
En fait mon exe, se lance automatiquement a chaque démarrage de windows et en fait ce que j'aimeré c'est a partir de cette exécutable detecter l'evenement de fermeture de son processus puis faire mes actions avant la fin du processus.
Merci
Ca dépend ce que tu veux faire mais tu peux peut-être regarder l'aide sur les sections initialization/finalization.
Autrement dans le source de ton projet(dpr) tu peux appeler tes actions après l'application.run, par contre il ne faut pas que ce que tu appelles contiennes des composants de ton application, sinon ca risque de planter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; MesActionsdeFermeture; end.
Normalement tu as l'évènement OnCloseQuery qui te permet de faire des actions avant la fermeture de celle-ci.Envoyé par locs
Sinon il faut que tu interceptes le message windows qui donne l'ordre de fermeture à ton application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 uses ... type TfrmMain = class(TForm) private { Déclarations privées } public { Déclarations publiques } procedure WMQueryEndSession(var Msg:TWMQueryEndSession); message WM_QUERYENDSESSION; end; var frmMain: TfrmMain; implementation procedure TfrmMain.WMQueryEndSession(var Msg: TWMQueryEndSession); begin // Ici tes actions à faire Msg.Result := 1; // si 1 on ferme l'application (voir aide pour les autres possibilité) end; end.
Bonjour, je viens de regarder les fonction OnCloseQuery, et OnClose, mais je n'arrive pas a les utiliser dans mon programme!
Quelqu'un pourrais me donner un exemple de syntaxe svp? je suis débutant en delphi!
Merci
Qu'est ce que tu veux faire dans le OnCloseQuery ou Onclose ?
1- Sélectionner la form
2- Aller dans ses évènements
3- Double cliquer sur l'évènement OnCloseQuery
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin case MessageDlg('Etes vous sûr de vouloir fermer l''application',mtConfirmation,[mbYes,mbNo],0) of mrYes : Canclose := True; mrNo : Canclose := False; end; end;
En fait je voudrais modifier des valeur dans ma base de registre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 TFormUSB = class(TForm) ProgressBar1: TProgressBar; Label1: TLabel; Timer1: TTimer; procedure CreateForm(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Déclarations privées } procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE; procedure EndSession(var Msg: TMessage); message WM_ENDSESSION; procedure WMQueryEndSession(var Msg:TWMQueryEndSession); message WM_QUERYENDSESSION; end; procedure TFormUSB.WMQueryEndSession(var Msg: TWMQueryEndSession); begin // Ici tes actions à faire GetRegistryValueStr('\Software\Intelys', 'serial', '', True, False); GetRegistryValueStr('\Software\Intelys', 'client','', True, False); GetRegistryValueStr('\Software\Intelys', 'user', '', True, False); GetRegistryValueStr('\Software\Intelys', 'plug', '0', True, False); end; procedure TFormUSB.FormClose(Sender: TObject; var Action: TCloseAction); begin GetRegistryValueStr('\Software\Intelys', 'serial', '', True, False); GetRegistryValueStr('\Software\Intelys', 'client','', True, False); GetRegistryValueStr('\Software\Intelys', 'user', '', True, False); GetRegistryValueStr('\Software\Intelys', 'plug', '0', True, False); end; procedure TFormUSB.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin GetRegistryValueStr('\Software\Intelys', 'serial', '', True, False); GetRegistryValueStr('\Software\Intelys', 'client','', True, False); GetRegistryValueStr('\Software\Intelys', 'user', '', True, False); GetRegistryValueStr('\Software\Intelys', 'plug', '0', True, False); end; procedure TFormUSB.FormDestroy(Sender: TObject); begin GetRegistryValueStr('\Software\Intelys', 'serial', '', True, False); GetRegistryValueStr('\Software\Intelys', 'client','', True, False); GetRegistryValueStr('\Software\Intelys', 'user', '', True, False); GetRegistryValueStr('\Software\Intelys', 'plug', '0', True, False); end;
Voila ce que j'ai rajouter comme code dans ma form, mais lorsque je vais dans le gestionnaire des taches et que je tue le processus correspondat a mon appli, aucune valeur n'est modifier dans ma base de données.
Mes fonctions pour ecrire dans la base de données fonctionnent, je les ai tester.
Si quelqu'un pouvais m'aider?
Merci
Oula, la tu parles de tuer le processus, et non pas le fermer correctement.
Je doute fort qu'une application "tuée" fasse quoi que ce soit au niveau sauvegarde, vu qu'elle est simplement arreter sauvagement sans lui laisser le temps de se finir comme il se doit. (enfin pour ma part moi je ne connais pas de solution contre le "tuage" d'application)
Ok merci pour ta reponse, par contre connaitrais-tu un moyen pour empecher de tuer un processus?
Bonjour,Envoyé par locs
Pour vivre heureux : vivons cachés...
Est ce vraiement une bonne idée ? Car si ton application se plante et s'emballe, qu'elle fait des choses qui detruise des données importantes, envoi des mails dans tous les sens sans s'arreter, etc ...Envoyé par locs
Tu fais comment pour l'arreter ? (déjà que tu débutes, on va pas te rajouter une couche ).
Je crois qu'il suffit simplement de ne pas données la main à un utilisateur sur le gestionnaire des taches (je crois que c''est possible , faudra confirmer), ca reglera le problème de "tuage" de l'application.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager