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

Langage Delphi Discussion :

Détecter le nombre d'instances d'un programme.


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Détecter le nombre d'instances d'un programme.
    Bonsoir amis Delphistes

    Mon application peut être ouverte plusieurs fois mais à la fermeture, elle arrête des processus qui doivent rester utilisables par les instances restant ouvertes.

    Je voudrais donc compter le nombre d'instances en cours pour n'arrêter les processus que lors de la fermeture de la dernière instance de mon programme.

    Quelle fonction me permet de compter le nombre d'instances de mon application ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 812
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 812
    Points : 15 228
    Points
    15 228
    Par défaut
    Bonsoir.
    Citation Envoyé par defluc Voir le message
    Quelle fonction me permet de compter le nombre d'instances de mon application ?
    Documente-toi sur CreateToolhelp32Snapshot, qui liste tous les processus qui tournent sur la machine.
    Après, t'auras plus qu'à compter les tiens,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 740
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 740
    Points : 13 283
    Points
    13 283
    Par défaut
    Comme dit Jipété, tu peux énumérer les processus.

    Tu peux aussi implémenter un sémaphore qui s'incrémentera à chaque appel ou tout simplement utiliser un mutex qui ne sera effectivement libéré que lorsque la dernière application y accédant sera fermée.

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    J'ai préféré créer une fonction utilisant CreateToolhelp32Snapshot comme suggéré par Jipété.
    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
    function CountInstances(ApplicName : string): Integer;
    var
      ProcessList : TProcessentry32;
      HndProcess : Thandle;
      Next : Boolean;
    begin
       Next := True;
       Result := 0;
       ProcessList.dwSize := sizeof(ProcessList);  //  Récuperation de la liste des process
       HndProcess := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
       if (HndProcess <> INVALID_HANDLE_VALUE) then
       begin
         Process32First(HndProcess, ProcessList);
         while Next do
         begin
           if Uppercase(ExtractFileName(ProcessList.szExeFile)) =
              UpperCase(ApplicName) then Inc(Result);
           Next := Process32Next(HndProcess, ProcessList);
         end;
       end;
       CloseHandle(HndProcess);
    end;
    Merci à tous deux et bon week end;

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

Discussions similaires

  1. 2eme instance d'un programme
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 25/04/2007, 20h58
  2. [FAQ] une seule instance de mon programme
    Par kacedda dans le forum C#
    Réponses: 6
    Dernier message: 01/02/2007, 13h37
  3. Réponses: 1
    Dernier message: 21/10/2006, 09h29
  4. [VB.NET] Instance d'un programme
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/07/2006, 14h30
  5. Nombre de Threads d'un programme
    Par c-ve dans le forum Delphi
    Réponses: 2
    Dernier message: 18/05/2006, 14h59

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