Qtはwindowsの下でプロセスを殺します:QprocessとシステムAPIの2つの方式
1620 ワード
方法は調べられますが、ここでまとめて、後で振り返ってみます.
1、QProcess
CMDのコマンドを直接実行し、スペースに注意!!!
2、システムAPI
プロセス名に基づいてプロセスPIDを見つけ、PIDに基づいてプロセスを殺す
PS:WHARはconst char*を回転してもっと良い方法があって伝言を残してください、ありがとうございます!
1、QProcess
QProcess p;
QString c = "taskkill /im DingTalk.exe /f";
p.execute(c);
p.close();
CMDのコマンドを直接実行し、スペースに注意!!!
2、システムAPI
プロセス名に基づいてプロセスPIDを見つけ、PIDに基づいてプロセスを殺す
#include
#include
#include
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 (pe32.szExeFile), static_cast(sizeof(pe32.szExeFile)), NULL, 0, NULL, NULL);
std::string result (iLn, 0);
WideCharToMultiByte (CP_UTF8, 0, pe32.szExeFile, static_cast(sizeof(pe32.szExeFile)), const_cast (result.c_str()), iLn, NULL, NULL);
if (0 == strcmp(exe.toStdString().c_str(), result.c_str ()))
{
dwPid = pe32.th32ProcessID;
bRet = TRUE;
qDebug()<
PS:WHARはconst char*を回転してもっと良い方法があって伝言を残してください、ありがとうございます!