先是要创建一个process的快照, 用api , CreateToolhelp32Snapshot
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
DWORD dwFlags,
DWORD th32ProcessID
);
dwFlags 包括对多种东西的枚举, 进程线程模块啥的, 这里选 TH32CS_SNAPPROCESS
关于 th32processID
th32ProcessID也就是说,这个参数值进程枚举时应该选 0,另外这个函数失败时返回 INVALID_HANDLE_VALUE ,在用之前必须判断一下
之后是 Process32First
BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
LPPROCESSENTRY32 是我们想要得到的结构体,
typedef
struct
tagPROCESSENTRY32
...
{
DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32, * PPROCESSENTRY32;
} PROCESSENTRY32, * PPROCESSENTRY32;
再用Process32Next 参数和Process32First一样, 得到下一个进程的LPPROCESSENTRY32
完整的;
#include
<
windows.h
>
#include < stdio.h >
#include < tlhelp32.h >
int main ( int argc, char * argv[])
... {
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
...{
printf("Create snap failed. error=%d ",::GetLastError());
return -1;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
while(bMore)
...{
printf("%-20s%u ",pe32.szExeFile,pe32.th32ProcessID);
bMore = ::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle(hProcessSnap);
return 0;
}
#include < stdio.h >
#include < tlhelp32.h >
int main ( int argc, char * argv[])
... {
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
...{
printf("Create snap failed. error=%d ",::GetLastError());
return -1;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
while(bMore)
...{
printf("%-20s%u ",pe32.szExeFile,pe32.th32ProcessID);
bMore = ::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle(hProcessSnap);
return 0;
}