您的位置:首页 > 其它

根据进程名称杀死指定进程

2016-09-07 11:06 501 查看
// KillProcess.cpp : 根据进程名称杀死指定进程
//

#include "stdafx.h"
#include "KillProcess.h"
#include "tlhelp32.h"
#include <atlstr.h>
BOOL KillProcessFromName(CString strProcessName);

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR    lpCmdLine,
int       nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

KillProcessFromName(_T("360MobileMgr.exe"));

return 0;
}
//kill进程from名字
BOOL KillProcessFromName(CString strProcessName)
{
//创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//PROCESSENTRY32进程快照的结构体
PROCESSENTRY32 pe;

//实例化后使用Process32First获取第一个快照的进程前必做的初始化操作
pe.dwSize = sizeof(PROCESSENTRY32);

//下面的IF效果同:
//if(hProcessSnap == INVALID_HANDLE_VALUE)   无效的句柄
if(!Process32First(hSnapShot,&pe))
{
return FALSE;
}

//将字符串转换为小写
strProcessName.MakeLower();

//如果句柄有效  则一直获取下一个句柄循环下去
while (Process32Next(hSnapShot,&pe))
{

//pe.szExeFile获取当前进程的可执行文件名称
CString scTmp = pe.szExeFile;

//将可执行文件名称所有英文字母修改为小写
scTmp.MakeLower();

//比较当前进程的可执行文件名称和传递进来的文件名称是否相同
//相同的话Compare返回0
if(!scTmp.Compare(strProcessName))
{

//从快照进程中获取该进程的PID(即任务管理器中的PID)
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);
::TerminateProcess(hProcess,0);
CloseHandle(hProcess);

scTmp.ReleaseBuffer();
strProcessName.ReleaseBuffer();
return TRUE;
}
scTmp.ReleaseBuffer();
}
strProcessName.ReleaseBuffer();
return FALSE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: