Nom de processus vers handle de processus

Résolu
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013 - 9 avril 2012 à 14:24
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013 - 15 avril 2012 à 17:35
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

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
15 avril 2012 à 15:14
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é.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2012 à 10:53
0
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
10 avril 2012 à 22:11
Je peux avoir un petit exemple ?
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 avril 2012 à 04:59
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.
0

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

Posez votre question
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
11 avril 2012 à 11:08
D'accord, je vais essayer de la faire...
0
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
15 avril 2012 à 13:55
Haaaa, je n'y arrive pas !
Est-ce que quelqu'un pourrait me faire une fonction ?
0
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
15 avril 2012 à 17:35
Merci, c'est parfait !
0
Rejoignez-nous