#include <windows.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(" CreateToolhelp32Snapshot调用失败! /n");
return -1;
}
// 遍历进程快照,轮流显示每个进程的信息,并判断是否是需要结束的
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while(bMore)
{
printf(" 进程名称:%s /n", pe32.szExeFile);
printf(" 进程ID号:%u /n/n", pe32.th32ProcessID);
//需要结束的进程名,如notepad.exe
char ThreadName[260] = "notepad.exe";
//memset(ThreadName,-52,260);
int i;
BOOL b_flagEql = TRUE;
//判断进程名是否是需要终结的
for(i = 0;i <= strlen("notepad.exe");i++)
{
if(ThreadName[i]!=(pe32.szExeFile)[i])
{
b_flagEql = FALSE;
break;
}
}
if(b_flagEql)
{
printf(" 进程ID号:%u /n/n", pe32.th32ProcessID);
//返回进程的句柄
HANDLE hProcess=::OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID);
if(hProcess != NULL)
{
//终结进程
::TerminateProcess(hProcess,0);
}
CloseHandle(hProcess);
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}
// 不要忘记清除掉snapshot对象
::CloseHandle(hProcessSnap);
return 0;
}