Qt在windows下杀死进程:QProcess和系统API两种方式

虽然方法能查到,这里总结一下,以后方便回顾一下

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()<<"zhaodao";
            break;
        }
    }

    CloseHandle(hProcessSnap);
    qDebug()<

PS:WCHAR转const char*有更好的方法请留言,谢谢!




你可能感兴趣的:(Qt)