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

API, COM et SDKs Delphi Discussion :

[D6] Comment identifier le processus de l'application ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 080
    Points
    7 080
    Par défaut [D6] Comment identifier le processus de l'application ?
    J'ai une application qui peut être lancée plusieurs fois.
    Une commande permet de parcourir tous les processus, pour fermer les instances ouvertes de mon application (en utilisant le nom de l'exe).
    Le problème, c'est que comme je ne sais pas reconnaitre le processus de l'application qui a donné l'ordre, elle se ferme elle aussi (et parfois, avant d'avoir fermé tous les autres).

    Comment identifier le processus de l'application (de manière unique) ?

  2. #2
    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
    Pourquoi ne pas recupérer le handle de la fenêtre (ou autres) et de supprimer tous les autres processus identique qui n'ont pas cet handle ?

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 080
    Points
    7 080
    Par défaut
    Citation Envoyé par Malatar
    Pourquoi ne pas recupérer le handle de la fenêtre (ou autres) et de supprimer tous les autres processus identique qui n'ont pas cet handle ?
    Oui, il a une fenêtre visible.
    Mais comment passer du handle du processus au handle de fenêtre (et inversement) ?

  4. #4
    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
    si tu arrives a récuper le handle du processus, tu dois pouvoir rendre l'application active,
    et si tu rends l'application active tu peux récupérer le handle de la fenêtre active.

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 080
    Points
    7 080
    Par défaut
    Citation Envoyé par Malatar
    si tu arrives a récuper le handle du processus, tu dois pouvoir rendre l'application active,
    et si tu rends l'application active tu peux récupérer le handle de la fenêtre active.
    Tu n'aurais pas un exemple de fonction pour faire ça sous la main ?


  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
    Avec GetCurrentProcess et OpenProcess tu devrais normalement pouvoir avoir ce que tu veux.

    GetCurrentProcess : lui te fournit le handle de l'appli en cours

    Après tu dois pouvoir modifier ce code de manière à pouvoir tuer correctement ton appli sauf celle qui est en court (grace au handle recup par GetCurrentProcess).

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 080
    Points
    7 080
    Par défaut
    Citation Envoyé par Malatar
    Avec GetCurrentProcess


    Ca me semble pas mal.
    Je teste ...

    Sinon, quelle différence avec GetCurrentProcessID ?

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 080
    Points
    7 080
    Par défaut
    Bon, ca marche :
    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
    function TMainForm.FermeT: Integer;
    var
       nSnapShot: Integer;
       nHandleProcessus: DWORD;
       FProcessEntry32: TProcessEntry32;
    begin
       Result := 0;
     
       //.ID du processus courant.
       nHandleProcessus := GetCurrentProcessID;    // <---
     
       nSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     
       //.Si erreur.
       if nSnapShot = -1 then
          Exit;
     
       FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
       if Process32First(nSnapShot, FProcessEntry32) then
       begin
          //.Tant qu'il reste un processus.
          repeat                            
             if AnsiLowerCase(ExtractFileName(FProcessEntry32.szExeFile)) = AnsiLowerCase(ExtractFileName(Application.ExeName)) then
             begin
                //.Si autre processus.
                if FProcessEntry32.th32ProcessID <> nHandleProcessus then
                begin
                   //.Suppression du processus.
                   if not TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0) then
                      Inc(Result);
                end;
             end;
          until not Process32Next(nSnapShot, FProcessEntry32);
       end;
     
       CloseHandle(nSnapShot);
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. comment avoir le ID processus d'une application connue par nom
    Par azstar dans le forum Windows Mobile
    Réponses: 3
    Dernier message: 02/05/2012, 19h04
  3. Comment tuer le processus de son application
    Par superjaja dans le forum Visual C++
    Réponses: 4
    Dernier message: 20/03/2007, 16h30
  4. comment securiser l'installation d'une application
    Par silya dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/03/2004, 14h34

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