Recupérér Handle de d'un processus [Résolu]

kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 12:08 - Dernière réponse : kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention
- 9 avril 2007 à 02:08
Bonjour

je voudrais recuperer le handle d'un processus active ex :explorer.exe

jai deja un code similaire mais il trouve que le PID a partir du processus

#include <windows.h>
#include <tlhelp32.h>  //th32.lib ou libth32.a
#include <stdio.h>

//---------------------------------------------------
DWORD GetPidByName(char *szProcName)
{
  DWORD dwPID = 0;
  PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)};
  HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if(hSnap != INVALID_HANDLE_VALUE)
  {
    if(Process32First(hSnap, &pe))
    {
      do
      {
        if(strcmpi(pe.szExeFile, szProcName) == 0)
        {
          dwPID = pe.th32ProcessID;
          break;
        }  
      }
      while(Process32Next(hSnap, &pe));
    }
    CloseHandle(hSnap);
  }
  return dwPID;
}

//---------------------------------------------------
int main(void)
{
  printf("PID = %ld\n", GetByName("explorer.exe"));
  system("pause>nul");
  return 0;
}

Pouriez-vous maider

Kevin
Afficher la suite 

15 réponses

Répondre au sujet
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 8 avril 2007 à 20:28
+3
Utile
Ok, voici un exemple:

    DWORD pid=0;
    DWORD processid=972;
    HWND fenetre=FindWindowEx(0,0,0,0);
    do
    {
        GetWindowThreadProcessId(fenetre,&pid);
        if(pid==processid) SetWindowText(fenetre,"Nouveau titre");
        fenetre=FindWindowEx(0,fenetre,0,0);
    }while(fenetre);
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de racpp
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 9 avril 2007 à 01:21
+3
Utile
C'est simple. Tu remplaces:
DWORD processid=972;
par:
DWORD processid=GetPidByName("monprogramme.exe");
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de racpp
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 8 avril 2007 à 12:31
+1
Utile
Salut,
Tu peux utiliser OpenProcess() qui récupère le HANDLE d'un processus à partir de son PID.
Commenter la réponse de racpp
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 12:57
0
Utile
Merci j'essaye et je te tiens au courant
aurais tu un exemple d'utilisation de cette commande stp?

Kevin
Commenter la réponse de kiki67100
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 8 avril 2007 à 13:03
0
Utile
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,0,dwPID);
//...
CloseHandle(hProcess);
Commenter la réponse de racpp
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 13:06
0
Utile
Merci pour ta reponse tres rapide mais je suis vraiment debutant comment puis-je fait pour trouver le HANDLE DE EXPLORER.exe

Merci
Commenter la réponse de kiki67100
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 8 avril 2007 à 13:31
0
Utile
La fonction GetPidByName() mentionnée dans ton code permet de trouver le PID d'un processus à partir de son nom. Elle te retournera le PID correspondant au nom de processus donné en paramètre. OpenProcess() retrouve le HANDLE depuis le PID:
DWORD dwPID=GetPidByName("explorer.exe");
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0,dwPID);
//...
CloseHandle(hProcess);
Commenter la réponse de racpp
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 14:40
0
Utile
Merci pour tes reponse tres rapide mais je suis vraiment debutant le code vient pas de moi.
le but rechercher serait de cacher l'explorateur (explorer.exe) puis l'afficher et aussi modifier les titre des fenetre de msn ,iexplorer,ect... via le processus. avec cette commande ShowWindow(hWnd, SW_SHOW);
moi voila je susi bloquer je narrive pas a utiliser la commande OpenProcess

merci

Kevin
Commenter la réponse de kiki67100
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 14:44
0
Utile
Pour avoir le HANDLE du processus apres pour faire ceci
HWND hWnd = FindWindow(0,"notepad.exe");//ceci ne marche pas
SetWindowText(hWnd, "lenouveautitre.");//le nouveau titre
Commenter la réponse de kiki67100
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 8 avril 2007 à 16:08
0
Utile
FindWindow() prend le texte affiché sur la barre de titre comme 2ème paramètre. On ne peut pas lui passer le nom du processus. Il est préférable d'utiliser le 1er paramètre qui est le nom de la classe de fenêtre:
HWND hwndNotepad=FindWindow("notepad",0);
SetWindowText(hwndNotepad,"Nouveau titre");
Pour une fenêtre de l'explorateur, le nom de la classe est CabinetWClass.
Commenter la réponse de racpp
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 17:49
0
Utile
Je me suis mal expliquer dsl

jaimerais lister les fenetre utiliser par un processus exemple msn Messenger
puis recuperer les HANDLE des fenetre pour les modifier ect...
On peut utiliser la commande FindWindow(0,"*MSN"): un truc dans le genre qui permet de prendre tout les fentre commancent par MSN ?

Kevin
Commenter la réponse de kiki67100
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 8 avril 2007 à 19:06
0
Utile
Une fois tu as le PID d'un processus, tu énuméreras toutes les fenêtres du bureau avec FindWindowEx(). Avec GetWindowThreadProcessId() tu obtiens le PID du processus associé à chaque fenêtre. Si égal au premier PID alors la fenêtre appartient au processus voulu.
Commenter la réponse de racpp
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 19:50
0
Utile
Merci de mavoir atant aider pourais tu me montrer un exemple avec le PID numero 972
et lister les fenetre stp apres comme sa je pourais faire un tuto sur les gestion des fenetre

Kevin
Commenter la réponse de kiki67100
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 8 avril 2007 à 21:34
0
Utile
MERCI BEAUCOUP
comment puige faire pour mettre la variable GetPidByName en  processid pour
pour remplacer 972 par  GetPidByName("monprograme.exe");
(sa veut la peine que je poste de code en tant que source car je trouve quel et interessent)

MERCI BEAUCOUP [auteurdetail.aspx?ID=295159 racpp]

Kevin
Commenter la réponse de kiki67100
kiki67100 318 Messages postés samedi 6 mai 2006Date d'inscription 10 août 2013 Dernière intervention - 9 avril 2007 à 02:08
0
Utile
OK merci pour tout

Kevin
Commenter la réponse de kiki67100

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.