【进程处理】1,枚举进程,关闭进程

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 权限。



你可能感兴趣的:(【进程处理】1,枚举进程,关闭进程)