天天看点

MFC获得指定进程的ID,路径及终止进程

转载自:http://blog.sina.com.cn/s/blog_a473b7dc0101foir.html

头文件#include"tlhelp32.h"

voidManagerDlg::OnBnClickedOk()

{

DWORD procID=this->GetProcessidFromName(L"qq.exe",LLNPath);

if(procID>0)

{

HANDLE handle=OpenProcess(PROCESS_TERMINATE,FALSE,procID);

BOOL ret=TerminateProcess(handle,4);//这里必须是4,否则无法结束进程

if(ret==0)

{

AfxMessageBox(L"can't Terminate the Specifize Process");

return;

}

}

}

DWORDManagerDlg::GetProcessidFromName(CString processName,CString &processPath)

{

PROCESSENTRY32 pe;

MODULEENTRY32 me;

DWORD id=0;

HANDLE mehandle;

HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

pe.dwSize=sizeof(PROCESSENTRY32);

BOOL ret=Process32First( hSnapshot,&pe);

if(!ret)

return0;

while(1)

{

pe.dwSize=sizeof(PROCESSENTRY32);

if(Process32Next(hSnapshot,&pe)==FALSE)

break;

if(processName.CompareNoCase(pe.szExeFile)==0)

{

id=pe.th32ProcessID;

//获取当前进程所在路径

mehandle=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,id);

me.dwSize=sizeof(MODULEENTRY32);

Module32First(mehandle,&me);

processPath=me.szExePath;

break;

}

}

CloseHandle(hSnapshot);

returnid;

}