Qt 检测进程是否存在并关闭进程

QString strProcessName = "QQ.exe";
bool
bIsExist = false; // 进程是否存在 QProcess process; process.start("tasklist.exe"); if (process.waitForFinished()) { QByteArray result = process.readAll(); QString exe = QString(result); if (exe.contains(strProcessName)) { bIsExist = true; // 找到了 } } process.close(); //结束进程 QStringList list; list << "/im" << strProcessName << "/f"; QProcess::execute(QLatin1String("taskkill"), list); //程序需以管理员权限运行

 注意:上面这种方法,当有的电脑没有tasklist.exe或taskkill.exe时则无效。

 

#include <windows.h>
#include <setupapi.h>
#include <tlhelp32.h>
#include <devguid.h>
#include "tchar.h"   //_tcslen头文件
#include "winnt.h"

bool GetProcessidFromName(QString name)
{
    bool isExist=false;
    PROCESSENTRY32 pe;
    HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    pe.dwSize=sizeof(PROCESSENTRY32);
    if(!Process32First(hSnapshot,&pe))
   {
    CloseHandle(hSnapshot);
    
return false;
   }
while(1) { pe.dwSize=sizeof(PROCESSENTRY32); if(Process32Next(hSnapshot,&pe)==FALSE) break; char out[1024]={0}; sprintf(out, "%ws", pe.szExeFile); if(strcmp(out,name.toStdString().c_str())==0) {   isExist=true;           HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID); //获取进程句柄   ::TerminateProcess(hProcess,0); //结束进程   CloseHandle(hProcess);   break;   }   }   CloseHandle(hSnapshot);   return isExist; }

 

参考:C++ 判断进程是否存在 - lizhigang - 博客园 (cnblogs.com)

C/C++结束指定进程_沭阳的博客-CSDN博客_c++结束进程

posted @ 2021-05-08 11:59  远方是什么样子  阅读(2748)  评论(0编辑  收藏  举报