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

Threads & Processus C++ Discussion :

comment déterminer un processus différent de moi


Sujet :

Threads & Processus C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut comment déterminer un processus différent de moi
    bonjour,

    je veux exécuter mon programme plusieurs fois, il y a donc plusieurs instances de mon programme qui tournent à la fois, et qui s'envoient des messages.
    je veux pouvoir déterminer une instance (un processus), parmi l'ensemble des processus portant le même nom, et différent du processus qui exécute le code.

    voici mon code:

    HANDLE hSnapShot;
    PROCESSENTRY32 uProcess;
    bool r;
    short PID = 0;

    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);

    r = Process32First(hSnapShot, &uProcess);//on récupére le 1er processus

    do
    {

    if (strstr(uProcess.szExeFile,"monProcessus") ) //on a trouvé le processus
    {
    PID = (short) uProcess.th32ProcessID; //on récupére le PID du processus

    // On retrouve le HWND correspondant au processus trouvé
    HWND hWindowRecherche = NULL;
    DWORD test_pid,test_thread_id;
    HWND hWindow = ::FindWindow(NULL,NULL);

    do
    {
    if(::GetParent(hWindow) == NULL)
    {
    test_thread_id = ::GetWindowThreadProcessId(hWindow,&test_pid);

    if(test_pid == PID)
    {
    hWindowRecherche = hWindow;

    if ( PID != 0 )
    {

    "j'envoie coucou à mon processus"

    }
    }
    }
    hWindow = ::GetWindow(hWindow, GW_HWNDNEXT);
    } while (hWindow);
    }
    r = Process32Next(hSnapShot, &uProcess); //on passe au processus suivant dans la liste
    } while ( r );



    à ce niveau, je peux interagir avec tous les processus portant le nom "monProcessus", et donc avec moi même....
    moi je veux pouvoir interagir avec seulement les autres processus "monProcessus", mais pas avec moi...

    Je vous rappelle que je lance plusieurs instances de mon code.
    merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    vite, une réponse !o!

    j'ai essayé GetActiveWindow qui retourne la fenêtre active (celle qui exécute le code) mais cela ne marche pas.....

    myWindow = GetActiveWindow();
    mythread_id = ::GetWindowThreadProcessId(myWindow,&myPID);

    dans "myPID" je devrai normalement retrouver le pid de la fenêtre active, que je pourrai comparer aux pid des autres processus......

    sans succès

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    quelqu'un pourrait-il me dire comment un processus peut-il connaitre son propre PID....
    en effet, grâce au code donné plus haut, je veux que mon processus puisse envoyer un certain message à un autre processus, autre que lui, alors même que tous ses processus sont des mêmes instances d'un code et qu'ils portent tous le même nom en s'exécutant...........

    merci

  4. #4
    Membre très actif Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 923
    Par défaut
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD WINAPI GetCurrentProcessId(void);
    tu auras l'ID de ton process.
    A comparer ensuite avec le champ th32ProcessID de la structure d'info retournée par Process32First /Process32Next.

Discussions similaires

  1. Comment déterminer le nombre de jours d'un mois ?
    Par BAMBADJI dans le forum Général Java
    Réponses: 11
    Dernier message: 04/02/2015, 01h27
  2. Réponses: 6
    Dernier message: 11/11/2013, 03h53
  3. Réponses: 0
    Dernier message: 11/12/2009, 19h06
  4. Comment déterminer si un composant est d'un type "TMonT
    Par DanielR dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/03/2004, 18h22

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