Bonjour,
Dans le cadre de mon projet BTS, j'ai une méthode de mon application chargée de détecter si un processus .exe est démarrée ou non. Pour cela, elle lit la liste des processus ouverts dans Windows, parcoure cette liste et si le nom est identique à celui passé en paramètre, elle récupère son PID et me renvoie un booléen.
Sauf qu'elle n'arrive pas à trouver le processus.
Après de multiples tests, j'ai trouvé la cause. Le membre de la structure PROCESSENTRY32 chargée de renvoyé le nom du process me renvoie une adresse et je ne comprend pas pourquoi.
Cette application est développée en C++ orienté objet sous Visual Studio 2010. La fonction incriminée a été testé avec succès sous Codeblocks en C++ mais non orienté objet (toutes les fonctions étaient dans le fichier main).
C'est suite à ces tests que j'ai passé le programme en objet.
Voici la méthode :
merci de votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 bool Serveur::etatProcess(const char *nom) { DWORD pid = 0; HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 process; ZeroMemory(&process, sizeof(process)); // rempli la zone mémoire de 0 process.dwSize = sizeof(process); if(Process32First(snapshot, &process)) { do { // process.szExeFile renvoie une adresse, la comparaison ne peux donc se faire // pourquoi ? if(strcmp((char *)process.szExeFile, nom) == 0) // 0 => comparaison ok { pid = process.th32ProcessID; break; } }while(Process32Next(snapshot, &process)); } CloseHandle(snapshot); if (pid != 0) { return true; } else { return false; } }
Partager