遍历进程和模块
通过CreateToolHelp32Snapshot函数可以给系统里面的所有进程,模块创建一个快照。然后通过Process32First 和Process32Next就可以遍历快照中的进程
void EnumProcess()
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得所有进程的快照
if (hSnapShot == INVALID_HANDLE_VALUE)
{
MessageBox(0, TEXT("进程快照获取失败"), TEXT("错误"), MB_OK | MB_ICONEXCLAMATION);
return;
}
PROCESSENTRY32 ProcessEntry = { sizeof(PROCESSENTRY32) };//结构体里面有进程的PID 进程名等信息 这个结构体的大小一定要赋值 不然会出错
//获取快照里的第一个进程的信息
Process32First(hSnapShot, &ProcessEntry);
while (Process32Next(hSnapShot, &ProcessEntry))
{
#ifdef _WIN64
//TH32CS_SNAPMODULE32 在64进程中需要枚举 32位模块 需要加上此标志
HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE32 | TH32CS_SNAPMODULE, ProcessEntry.th32ProcessID);
#else
HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessEntry.th32ProcessID);
#endif // _WIN64
MODULEENTRY32 moduleEntry = {sizeof(moduleEntry)};
Module32First(hModule,&moduleEntry);
if (ProcessEntry.th32ProcessID!=7720)
{
continue;
}
while (Module32Next(hModule, &moduleEntry))
{
printf("id:%d 模块名: %S\n", ProcessEntry.th32ProcessID, moduleEntry.szExePath);
}
if (hModule)
{
CloseHandle(hModule);
hModule = NULL;
}
}
if (hSnapShot)
{
CloseHandle(hSnapShot);
hSnapShot = NULL;
}
}