用CreateToolhelp32Snapshot/Process32First/Process32Next API枚舉系統進程。在很多情況下需要對系統的進程進行操作,方法有很多種但最常用的是CreateToolhelp32Snapshot/Process32First/Process32Next 一系列API
實現結束進程使用TerminateProcess
下面的函數可以使現對進程的枚舉:
int ProcessList()
{
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
int count=0;
HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot調用失敗!");
return -1;
}
BOOL bMore=::Process32First(hProcessSnap,&pe32);
printf("%20s/t%10s/n","進程名","PID");
printf("====================================/n");
while(bMore)
{
count++;
printf("%20s/t%10d/n",pe32.szExeFile,pe32.th32ProcessID);
bMore=::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle(hProcessSnap);
printf("====================================/n");
printf("/n當前系統進程數為:%d/n",count);
return 0;
}
結束進程可以使用下面的函數:(使現其中dwid為想要結束的進程ID可通過列進程的函數得到)
int TerminateProcessFromId(DWORD dwId)
{
BOOL bRet=FALSE;
HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);
if(hProcess!=NULL)
{
bRet=::TerminateProcess(hProcess,0);
}
::CloseHandle(hProcess);
if(bRet)
printf("%d 進程結束成功....../n/n/n/n",dwId);
else
printf("%d 進程結束失敗....../n/n/n/n",dwId);
return 0;
}