Qtはwindowsの下でプロセスを殺します:QprocessとシステムAPIの2つの方式

1620 ワード

方法は調べられますが、ここでまとめて、後で振り返ってみます.
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*を回転してもっと良い方法があって伝言を残してください、ありがとうございます!