Connaitre le pid à partir du handle d'un processus

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 20 mai 2004 à 16:17
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 21 mai 2004 à 15:15
comment récuperer le pid d'un processus lancé avec shellexecute ? (avec createprocess j'ai fait c'est plus simple)

j'ai utilisé shellexecutex, et avec ca j'ai pu récuperer le handle du processus crée, mais a part de celui ci, comment je trouve le pid ? (sachant ke j'ai trouvé sur msdn une fonction GetProcessId mais qui est implémenté uniquement sur XP SP1, et que mon header windows.h ne contient de toutes facons pas... dc sans doute ya un autre moyen)

il faudrait la fonction 'réciproque' de openprocess. quelqu'un connait ?

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 mai 2004 à 17:53
Tu as un hprocess.
Lance EnumWindows.
Dans enumProc a chaque tour:
DWORD pid;
GetWindowThreadProcessId(hwnd, &pid);
h = OpenProcess(..., pid);
if(h) {
CloseHandle(h)
if(h = hprocess) {
YOUPI pid; stop enum;
}
}

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 mai 2004 à 17:54
OUPS, faute de frappe comme d'hab.
if(h == hprocess) {
...

ciao...
BruNews, Admin CS, MVP Visual C++
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
20 mai 2004 à 18:02
ok merci ;)
jme demandais si yavait moyen de faire autrement mais bon.
la au- ca marche, dc c'est l'essentiel
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
21 mai 2004 à 00:39
ha ben finalement ca a pas l'air de marcher.
la raison : les handle retournés par OpenProcess sont des trucs temporaires. dc cad qu'un meme processus peut avoir des handle différents, tout dépend du moment ou on ouvre son process. et des processus différents peuvent avoir des meme valeurs de handle... si on a fermé le handle du processus d'avant en tout cas, c'est possible
ex:


void ListerPs()
{
   HANDLE hSnapShot;
   PROCESSENTRY32 uProcess;
   int r;
   short PID = 0; 
   
   hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
   uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
                                                  
   r = Process32First(hSnapShot, &uProcess);
   do      {
      PID = (short) uProcess.th32ProcessID;
   
      HANDLE hTemp = OpenProcess(PROCESS_ALL_ACCESS, false, (DWORD) PID);
      
      printf("handle : %d    pid : %d \n",hTemp,PID);

      CloseHandle(hTemp);
      r = Process32Next(hSnapShot, &uProcess);
   } while ( r );
   CloseHandle(hSnapShot);
}

ca affiche la meme valeur de handle pour tous les processus.

Le handle retourné par OpenProcess est un identifiant qui est unique, meme si on ouvre 2 fois le meme process... qd on fait closeHandle, la valeur de ce handle peut etre re aloué pour n'importe quel autre processus.
d'ou le probleme !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 mai 2004 à 00:46
Dans tous les cas, CreateProcess est bien mieux si tu peux l'utiliser.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
21 mai 2004 à 12:59
oué j'ai vu. jme demande meme s'il est possible de récuperer le pid d'un processus lancé avec shellexecute. jpense que c'est possible que ca soit non en tout cas...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 mai 2004 à 14:36
J'ai fait exemple pour qqun dans lequel je lance notepad vide et ensuite dans une EnumWindows je retrouve la fenetre par rapport au pid, je change son titre et je mets du texte dans cette fenetre notepad.
Comme quoi le pid n'a pas change depuis le lancement.
Mets moi un message avec un mail pour t'envoyer exemple si tu veux.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
21 mai 2004 à 15:15
ben c'est sur le pid il change jamais... mais le handle qu'on récupere avec OpenProcess sur un meme pid lui il peut changer. la valeur de ce handle peut meme etre la meme pour des processus différents, il suffit d'avoir fait closehandle entre temps... La je veu pa trouver quelque chose par rapport au pid, je veut l'inverse : trouver le pid a partir d'un handle. ce qui n'a pas l'air possible
0
Rejoignez-nous