Pour ce tutorial nous allons apprendre a lister d’une façon simple et rapide les processus.

Tout d’abord nous avons besoin de quelques variables:

HANDLE hProcessSnap;
PROCESSENTRY32W pe32;

Nous allons maintenant faire un “snapshot”, c’est a dire une photo de tous les processus. Pour cela nous allons utiliser la fonction CreateToolhelp32Snapshot qui prend 2 paramètre le premier étant un flag et le deuxième l’ID du processus.

HANDLE WINAPI CreateToolhelp32Snapshot(
__in DWORD dwFlags,
__in DWORD th32ProcessID
);

Pour le flag nous allons mettre TH32CS_SNAPPROCESS. (pour plus d’information concernant les flags veuillez faire un tour sur msdn) et pour l’ID nous allons le mettre a 0 pour indiquer le processus de notre programme.

Ensuite nous allons mettre le résultat dans la variable hProcessSnap.

hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

Ensuite nous devons “initialisez” dwSize de la structure PROCESSENTRY32 ceci devant été faire avant que l’on ne call Process32First:

pe32.dwSize = sizeof(PROCESSENTRY32);

Nous pouvons maintenant caller Process32First. Prenant en paramètre le Handle qui contient le snapshot ainsi que l’adresse de la structure PROCESSENTRY32. Cette fonction nous stocke la valeur du premier processus dans la structure PROCESSENTRY32.szExeFile.
BOOL WINAPI Process32First(
__in HANDLE hSnapshot,
__inout LPPROCESSENTRY32 lppe
);

Process32First(hProcessSnap,&pe32);

Ensuite nous n’avons plus qu’a créer une boucle et caller Process32Next qui nous donnera le prochain processus. Elle prend les mêmes paramètre que Process32First.

BOOL WINAPI Process32Next(
__in HANDLE hSnapshot,
__out LPPROCESSENTRY32 lppe
);

Nous pouvons donc créer une boucle:

do{

}while(Process32Next(hProcessSnap,&pe32));

ce qui donne:

HANDLE hProcessSnap;
PROCESSENTRY32W pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if(Process32First(hProcessSnap,&pe32)){
do{
MessageBox(NULL, pe32.szExeFile,NULL, MB_OK);//message box montrant les processus
}while(Process32Next(hProcessSnap,&pe32));
}