#include <Windows.h>
#include <tlhelp32.h>
#include <string.h>
using namespace std;
/*根据进程名称杀死进程
*1、根据进程名称找到PID
*2、根据PID杀死进程
*/
int killTaskl(const QString& exe)
{
//1、根据进程名称找到PID
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
return -1;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap, &pe32))
{
CloseHandle(hProcessSnap);
return -1;
}
BOOL bRet = FALSE;
DWORD dwPid = -1;
while (Process32Next(hProcessSnap, &pe32))
{
//将WCHAR转成const char*
int iLn = WideCharToMultiByte (CP_UTF8, 0, const_cast<LPWSTR> (pe32.szExeFile), static_cast<int>(sizeof(pe32.szExeFile)), NULL, 0, NULL, NULL);
std::string result (iLn, 0);
WideCharToMultiByte (CP_UTF8, 0, pe32.szExeFile, static_cast<int>(sizeof(pe32.szExeFile)), const_cast<LPSTR> (result.c_str()), iLn, NULL, NULL);
if (0 == strcmp(exe.toStdString().c_str(), result.c_str ()))
{
dwPid = pe32.th32ProcessID;
bRet = TRUE;
qDebug()<<"zhaodao";
break;
}
}
CloseHandle(hProcessSnap);
qDebug()<<dwPid;
2、根据PID杀死进程
HANDLE hProcess=NULL;
//打开目标进程
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,dwPid);
if (hProcess==NULL) {
qDebug()<<"Open Process fAiled ,error:"<<GetLastError();
return -1;
}
//结束目标进程
DWORD ret=TerminateProcess(hProcess,0);
if(ret==0) {
qDebug()<<"kill task faild,error:"<<GetLastError();
return -1;
}
return 0;
}
PS:WCHAR转const char*有更好的方法请留言,谢谢!