/*
Takes a snapshot of the specified processes, as well as the heaps, modules, and threads used by these processes.
*/
HANDLE WINAPI CreateToolhelp32Snapshot(
__in DWORD dwFlags,
__in DWORD th32ProcessID
);
/*
Retrieves information about the first process encountered in a system snapshot.
*/
BOOL WINAPI Process32First(
__in HANDLE hSnapshot,
__in_out LPPROCESSENTRY32 lppe
);
/*
Retrieves information about the next process recorded in a system snapshot.
*/
BOOL WINAPI Process32Next(
__in HANDLE hSnapshot,
__out LPPROCESSENTRY32 lppe
);
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
int main()
{
PROCESSENTRY32 processEntry = {0};
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
return -1;
processEntry.dwSize = sizeof(PROCESSENTRY32);
int cnt = 0;
BOOL bRet = Process32First(hProcessSnap, &processEntry);
while(bRet)
{
++cnt;
printf("ProcessID: %d (%s)\n", processEntry.th32ProcessID, processEntry.szExeFile);
bRet = Process32Next(hProcessSnap, &processEntry);
}
CloseHandle(hProcessSnap);
printf("cnt = %d\n", cnt);
}