您的位置:首页 > 编程语言 > Qt开发

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

2015-06-22 14:40 585 查看
下面代码是我在写程序过程中,找到的很好用,我总结了一下,主要是用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文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pid system qt