64 lines
2.3 KiB
C++
64 lines
2.3 KiB
C++
|
#ifndef CLOSE_PROCESS_HPP
|
||
|
#define CLOSE_PROCESS_HPP
|
||
|
|
||
|
/*
|
||
|
* 杀掉所有名字等于指定的名称的进程。
|
||
|
*/
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <tlhelp32.h>
|
||
|
#include <iostream>
|
||
|
#include <algorithm>
|
||
|
|
||
|
char* Wchar2Char(const wchar_t* wp)
|
||
|
{
|
||
|
int len = WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);
|
||
|
char* m_char = new char[len + 1];
|
||
|
WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), m_char, len, NULL, NULL);
|
||
|
m_char[len] = '\0';
|
||
|
return m_char;
|
||
|
}
|
||
|
|
||
|
BOOL KillProcessFromName(std::string 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;
|
||
|
}
|
||
|
//将字符串转换为小写
|
||
|
std::transform(strProcessName.begin(), strProcessName.end(), strProcessName.begin(), ::tolower);
|
||
|
//如果句柄有效 则一直获取下一个句柄循环下去
|
||
|
while (Process32Next(hSnapShot, &pe))
|
||
|
{
|
||
|
char* pszTem = Wchar2Char(pe.szExeFile);
|
||
|
//pe.szExeFile获取当前进程的可执行文件名称
|
||
|
std::string scTmp = std::string(pszTem);
|
||
|
delete[] pszTem;
|
||
|
//将可执行文件名称所有英文字母修改为小写
|
||
|
std::transform(scTmp.begin(), scTmp.end(), scTmp.begin(), ::tolower);
|
||
|
//scTmp.MakeLower();
|
||
|
//比较当前进程的可执行文件名称和传递进来的文件名称是否相同
|
||
|
//相同的话Compare返回0
|
||
|
if (scTmp == strProcessName)
|
||
|
{
|
||
|
//从快照进程中获取该进程的PID(即任务管理器中的PID)
|
||
|
DWORD dwProcessID = pe.th32ProcessID;
|
||
|
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
|
||
|
::TerminateProcess(hProcess, 0);
|
||
|
CloseHandle(hProcess);
|
||
|
return TRUE;
|
||
|
}
|
||
|
//scTmp.ReleaseBuffer();
|
||
|
}
|
||
|
//strProcessName.ReleaseBuffer();
|
||
|
return FALSE;
|
||
|
}
|
||
|
#endif
|