扫描系统进程和获取某进程的PID

时间:2021-12-20 23:37:54

扫描系统的所有进程

 #include <stdio.h>
#include <windows.h>
#include <tlhelp32.h> int scan()
{
HANDLE hprocessShap = NULL;
PROCESSENTRY32 pe32 = {};
hprocessShap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, ); if(hprocessShap == INVALID_HANDLE_VALUE)
{
printf("\nCreateToolhelp32Snapshot() failed:%d", GetLastError());
return ;
} pe32.dwSize = sizeof(PROCESSENTRY32); if(Process32First(hprocessShap, &pe32))
{
do
{
wprintf(pe32.szExeFile);
printf("\n");
}
while (Process32Next(hprocessShap, &pe32));
}
else
{
printf("\nProcess32First() failed:%d", GetLastError());
}
CloseHandle(hprocessShap);
return ;
} int main(int argc, char *argv)
{
scan();
return ;
}

获取某进程的PID

有时候在对系统某个进程进行操作时,我们需要获取程序的PID作为参数。其中一个方法当然是在任务管理器的详细信息里寻找,另外一个方法就是通过代码获取到进程的PID直接利用

 int getpid(wchar_t *name)
{
HANDLE hprocessShap = NULL;
//存放快照进程信息的结构体
PROCESSENTRY32 pe32 = {};
//对系统的进程建立一个快照进行扫描
hprocessShap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, );
if(hprocessShap == INVALID_HANDLE_VALUE)
{
printf("\nCreateToolhelp32Snapshot() failed:%d", GetLastError());
return ;
}
//设置结构体的大小
pe32.dwSize = sizeof(PROCESSENTRY32);
//Process32First获得第一个进程的句柄
if(Process32First(hprocessShap, &pe32))
{
//匹配输入的进程名
do
{
if(!wcscmp(name, pe32.szExeFile))
{
return (int)pe32.th32ProcessID;
}
}
while (Process32Next(hprocessShap, &pe32));
}
else
{
printf("\nProcess32First() failed:%d", GetLastError());
}
CloseHandle(hprocessShap);
return ;
}