下面代码是我在写程序过程中,找到的很好用,我总结了一下,主要是用Qt获取进程pid,以及如何通过pid或进程名称结束进程
//获取进程pid
#include<iostream>
#include<windows.h>#include<Tlhelp32.h>
using namespace std;
//获取启动多个fileName进程id,用qt数据结构存储的,大家也可以转成其它数据存储
QList<int> GetProcessIDs(char *FileName)
{
QList<int> pids;
HANDLE myhProcess;
PROCESSENTRY32 mype;
mype.dwSize = sizeof(PROCESSENTRY32);
BOOL mybRet;
//进行进程快照
myhProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //TH32CS_SNAPPROCESS快照所有进程
//开始进程查找
mybRet=Process32First(myhProcess,&mype);
//循环比较,得出ProcessID
while(mybRet)
{
QString temp=QString::fromWCharArray(mype.szExeFile);
if(strcmp(FileName,temp.toLocal8Bit())==0)
pids.append(mype.th32ProcessID);
mybRet=Process32Next(myhProcess,&mype);
}
return pids
}
//获取找到的第一个进程fileName的pid
int GetProcessID(char *FileName)
{
int pid;
HANDLE myhProcess;
PROCESSENTRY32 mype;
mype.dwSize = sizeof(PROCESSENTRY32);
BOOL mybRet;
//进行进程快照
myhProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //TH32CS_SNAPPROCESS快照所有进程
//开始进程查找
mybRet=Process32First(myhProcess,&mype);
//循环比较,得出ProcessID
while(mybRet)
{
if(strcmp(FileName,mype.szExeFile)==0)
pid=mype.th32ProcessID;
break;
mybRet=Process32Next(myhProcess,&mype);
}
return pid
}
//结束进程
system("taskkill /f /t /im 进程名");
system("taskkill /f /t /pid 进程pid");
下面是三种调用exe文件的方法:
system(“*.exe”)
WinExec("*.exe",SW_SHOW) //第一个参数是要调用的exe程序,第二个参数控制界面是否显示。
QProcess::startDetached("explorer "+path); //下面这种是使用Qt方法执行exe文件。