根据进程名称获取进程pid,结束进程,执行exe文件

来源:互联网 发布:ppt动画大师 mac 编辑:程序博客网 时间:2024/05/16 07:29

下面代码是我在写程序过程中,找到的很好用,我总结了一下,主要是用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文件。

0 0