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