Trouver le bon process ID!!!

Signaler
Messages postés
47
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
9 juin 2004
-
Messages postés
20
Date d'inscription
mercredi 24 octobre 2007
Statut
Membre
Dernière intervention
4 juin 2008
-
Je voudrais terminer un processus (avec TerminateProcess) dont je ne connais que le nom du fichier executable (mdm.exe par exemple), et le processus n'a pas de fenetre (je ne peux donc pas utiliser GetWindowThreadProcessId pour recuperer le PID)

Quelqu'un sait comment recuperer un process handle ou un PID en ne connaissant que le nom du fichier?

4 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
EnumProcesses() sur NT4 ou superieur.
BruNews, ciao...
Messages postés
47
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
9 juin 2004

Oui j'y avais pensé mais EnumProcesses donne une liste de PIDs. Comment savoir lequel correspond au filename desiré?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Suffit de regarder MSDN:

#include <windows.h>
#include <stdio.h>
#include "psapi.h"

void PrintProcessNameAndID( DWORD processID )
{
char szProcessName[MAX_PATH] = "unknown";
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
// Get the process name.
if (NULL != hProcess ) {
HMODULE hMod;
DWORD cbNeeded;
if(EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded))
{
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );
}
else return;
}
else return;
// Print the process name and identifier.
printf( "%s (Process ID: %u)\n", szProcessName, processID );
CloseHandle( hProcess );
}

void main( )
{
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if(!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded)) return;
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
// Print the name and process identifier for each process.
for ( i = 0; i < cProcesses; i++ ) PrintProcessNameAndID( aProcesses[i] );
}

BruNews, ciao...
Messages postés
20
Date d'inscription
mercredi 24 octobre 2007
Statut
Membre
Dernière intervention
4 juin 2008

Je cherche à faire un programme en C qui quitte taskmgr.exe
J'ai cherché à mettre la commande

system("taskkill /f /im taskmgr.exe");
getchar();

Le problème est que sur XP Pro la commande marche parfaitement mais sur Familial ou sur Home Edition, je suis certain que ce n'est pas la même commande car il faut utiliser TSKILL
TSKILL demande l'ID du processeur

Qu'est-ce-que c'est ?
Comment la trouver sur n'importe quel ordinateur ?





Depuis toujours I.E est mieux que Mozillia F.
Depuis toujours XP est mieux que Mac
Depuis toujours OM est mieux que PSG
Depuis toujours et pour longtemps...