Mit folgendem Codestück lassen sich die Prozesse und/oder die laufenden Threads auslesen:
#include <tlhelp32.h>
.........
PROCESSENTRY32 pe;
DWORD Pid=-1;
String procname;
value="notepad.exe"; //Als Beispiel das Programm Notepad
//Einen Schnappschuss des Liste holen -> mit TH32CS_SNAPTHREAD können die Threads geholt werden
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if ((int)hSnapshot==-1)
return false;
pe.dwSize=sizeof(PROCESSENTRY32);
bool retval=Process32First(hSnapshot,&pe);
while(retval)
{
procname=pe.szExeFile; // in der PROCESSENTRY32-Struktur stehen dann die Infos....
procname=procname.LowerCase();
if(procname==value||procname.Pos(value)>0)
{
Pid=pe.th32ProcessID; //ProzessID holen
break;
}
pe.dwSize=sizeof(PROCESSENTRY32);
retval=Process32Next(hSnapshot,&pe);
}
CloseHandle(hSnapshot);
if(Pid==-1)
//Fehler Prozess nicht gefunden
//Prozess öffnen
HANDLE hProc=OpenProcess(PROCESS_TERMINATE|SYNCHRONIZE,false,Pid);
if(hProc==NULL)
//Fehler
Prozess abschiessen
TerminateProcess(hProc,0);
//Warte 5 Sek. ob es funktioniert hat
DWORD ws=WaitForSingleObject(hProc,5000);
if(ws==WAIT_TIMEOUT)
//Prozess konnte innerhalb von 5 Sek. nicht beendet werden
//ok