Nom de processus vers handle de processus [Résolu]

Signaler
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013
-
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013
-
Bonjour à tous,

Voici mon problème : J'ai un nom de processus déjà ouvert (par exemple notepad.exe) dans une variable char. Et je voudrais une fonction qui, à partir de ce nom de processus, me retourne son handle (qui sera utilisé avec SetPriorityClass).

Merci d'avance, et j’espère avoir été assez compréhensible

7 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Voici un exemple:

#include <windows.h>
#include 

#pragma comment(lib,"psapi.lib")

/* Cette fonction retourne le handle d'un processus à partir de son nom */
HANDLE GetProcessHandle( char* szprocessname)
{
DWORD dwprocessids[1024];
DWORD dwreturned;
char szbuffer[MAX_PATH];
if(EnumProcesses(dwprocessids,1024,&dwreturned))
{
DWORD i;
HANDLE hProcess;
HMODULE hmod;
DWORD dwcount=dwreturned/sizeof(DWORD);
for(i=0;i<dwcount;i++)
{
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,0,dwprocessids[i]);
if(hProcess)
{
if(EnumProcessModules(hProcess,&hmod,sizeof(HMODULE),&dwreturned))
{
GetModuleBaseName(hProcess,hmod,szbuffer,MAX_PATH);
if(!lstrcmpi(szbuffer,szprocessname))return hProcess;
}
CloseHandle(hProcess);
}
}
}
return NULL;
}

// Exemple d'utilisation:
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR szcmd, int ishow)
{
HANDLE hprocess = GetProcessHandle("notepad.exe");
if(hprocess)
{
//ajouter code ici
CloseHandle(hprocess);
}
return 0;
}


Puisque plusieurs processus peuvent avoir le même nom, la fonction peut être modifiée pour retourner le nombre de processus trouvés et leurs handles dans un tableau.
J'espère n'avoir rien oublié.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

Je peux avoir un petit exemple ?
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
La page que te propose BruNews contient un lien vers un exemple d'utilisation en C dont tu peux t'inspirer. La démarche est la suivante:
- Utiliser EnumProcesses() pour obtenir les identificateurs de tous les processus.
- Calculer le nombre total des processus trouvés.
- Dans une boucle for(), utiliser OpenProcess(), EnumProcessModules(), GetModuleBaseName() et lstrcmpi() pour comparer le nom du processus avec celui que tu veux. Si ils correspondent, retourner le handle du processus. Sinon, fermer le handle du processus avec CloseHandle() puis contiuer la boucle.

Si tu n'y arrives pas, je te ferai une fonction demain.
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

D'accord, je vais essayer de la faire...
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

Haaaa, je n'y arrive pas !
Est-ce que quelqu'un pourrait me faire une fonction ?
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

Merci, c'est parfait !