1,代码如下
#include "stdafx.h"
#include <Windows.h>
#include "tlhelp32.h"
int main(int argc, char* argv[])
{
PROCESSENTRY32 pe;
DWORD id=0;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(!Process32First(hSnapshot,&pe))
return 1;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
//在这里处理这个枚举到的进程,比如是qq或飞秋就关闭它
if((0 == stricmp(pe.szExeFile,"feiq.exe")) || (0 == stricmp(pe.szExeFile,"qq.exe")))
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
if(hProcess != NULL)
{
TerminateProcess(hProcess,0);
}
}
}
CloseHandle(hSnapshot);
return 0;
}
2,说明
需要头文件 tlhelp32.h。
主要看下这个PROCESSENTRY32结构,它包含了一个进程的相关信息:
typedef struct tagPROCESSENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID; // this process
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID; // associated exe
DWORD cntThreads;
DWORD th32ParentProcessID; // this process's parent process
LONG pcPriClassBase; // Base priority of process's threads
DWORD dwFlags;
CHAR szExeFile[MAX_PATH]; // Path
} PROCESSENTRY32;
th32ProcessID :进程ID
th32ParentProcessID: 父进程ID
szExeFile: 可执行文件的名称
另外,OpenProcess函数可以通过进程ID得到进程句柄,TerminateProcess 通过进程句柄可以关闭进程。
但要注意,如果想关闭进程,使用OpenProcess获取句柄时第一个参数需要包含 PROCESS_TERMINATE 权限。