Recupérér Handle de d'un processus

Résolu
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 - 8 avril 2007 à 12:08
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 - 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

15 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 avril 2007 à 20:28
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);
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 avril 2007 à 01:21
C'est simple. Tu remplaces:
DWORD processid=972;
par:
DWORD processid=GetPidByName("monprogramme.exe");
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 avril 2007 à 12:31
Salut,
Tu peux utiliser OpenProcess() qui récupère le HANDLE d'un processus à partir de son PID.
1
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 12:57
Merci j'essaye et je te tiens au courant
aurais tu un exemple d'utilisation de cette commande stp?

Kevin
0

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

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 avril 2007 à 13:03
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,0,dwPID);
//...
CloseHandle(hProcess);
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 13:06
Merci pour ta reponse tres rapide mais je suis vraiment debutant comment puis-je fait pour trouver le HANDLE DE EXPLORER.exe

Merci
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 avril 2007 à 13:31
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);
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 14:40
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
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 14:44
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
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 avril 2007 à 16:08
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.
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 17:49
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
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 avril 2007 à 19:06
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.
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 19:50
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
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
8 avril 2007 à 21:34
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
0
kiki67100 Messages postés 313 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 10 août 2013 1
9 avril 2007 à 02:08
OK merci pour tout

Kevin
0
Rejoignez-nous