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; }