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++結束進程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM