IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Détecter la fin de son processus


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut Détecter la fin de son processus
    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

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Salut,

    Si c'est toi qui lance cette application tu peux utiliser "createprocess", avec un "waitforsingleobject" pour détecter la fin.

    @+.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    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

  4. #4
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    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

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    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.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par locs
    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
    Normalement tu as l'évènement OnCloseQuery qui te permet de faire des actions avant la fermeture de celle-ci.
    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.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    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

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    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;

  9. #9
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    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

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    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)

  11. #11
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Points : 40
    Points
    40
    Par défaut
    Ok merci pour ta reponse, par contre connaitrais-tu un moyen pour empecher de tuer un processus?

  12. #12
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut
    Citation Envoyé par locs
    Ok merci pour ta reponse, par contre connaitrais-tu un moyen pour empecher de tuer un processus?
    Bonjour,

    Pour vivre heureux : vivons cachés...

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par locs
    Ok merci pour ta reponse, par contre connaitrais-tu un moyen pour empecher de tuer un processus?
    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 ...
    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.

Discussions similaires

  1. détecter la fin d'exécution d'un processus
    Par d_hazem dans le forum Général Java
    Réponses: 5
    Dernier message: 30/01/2009, 09h52
  2. Réponses: 7
    Dernier message: 18/07/2007, 16h40
  3. Réponses: 9
    Dernier message: 18/06/2007, 10h27
  4. attendre la fin d'un processus
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 27/02/2004, 15h37
  5. Comment Attendre la fin d'un Processus
    Par mr_titi dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/06/2003, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo