获取系统进程列表与终止进程

来源:互联网 发布:mac virtualbox nat 编辑:程序博客网 时间:2024/04/28 00:54

1.定义结构体PROCESSENTRY32并初始化其成员dwsize
PROCESSENTRY32 proc;proc.dwsize=sizeof(PROCESSENTRY32);
2.用GreateToolhelp32Snapshot(DWORD dwFlags,//TH32CS_SNAPPROCESS或TH32CS_SNAPTHREAD
DWORD th32ProcessID);//可为0
函数返回一个进程句柄:
HANDLE hSysSnapshot=CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
3.用Process32First ( HANDLE hSnapshot,
PROCESSENTRY32 *proc )
函数获取结构体PROCESSENTRY32个成员的值;由其成员szExeFile返回可执行文件路径,
由其成员th32ProcessID返回进程ID。
4.调用函数Process32Next()作的(3)步相同的处理。
5.关闭句柄CloseHandle(hSysSnapshot);

终止进程:

1. 用进程ID用OpenProcess()函数打开进程,返回进程句柄。
2.用函数TerminateProcess()终止进程。
3.关闭句柄。

//代码:
//定义两个数组用来保存进程ID和对应的文件名
#include<TLHELP32.H>
CString ProcFileName[30];
long ProcID[30];
//列表所有进程
void ListProcess(CString procFileName[],LONG procID[])
{
HANDLE hSysSnapshot = NULL;
PROCESSENTRY32 proc;
proc.dwSize = sizeof(proc);
hSysSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
if ( hSysSnapshot == (HANDLE)-1 )
return;
if ( Process32First ( hSysSnapshot, &proc ) )
{
proc.dwSize = sizeof(proc);
int nProcCount=0;
do
{
ProcFileName[nProcCount]=CString(proc.szExeFile);
ProcessID[nProcCount]=proc.th32ProcessID;
nProcCount++;
}
while ( Process32Next (hSysSnapshot, &proc));
}
CloseHandle(hSysSnapshot);
}

//终止指定ID号的进程
void Killproc(int nProcID)
{
if(nProcID)
{
HANDLE hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,nProcID);
if(hProc)
{ TerminateProcess(hProc,99);
CloseHandle(hProc);
}
}
}