一、概述
本文将介绍通过QProcess类实现对外部应用程序是否已经启动的判断、启动和关闭。
二、判断外部程序是否已经启动
Qt在windows下实际上是通过QProcess对象启动windows自带的tasklist程序来读取正在系统中运行的所有程序的信息(其中包括了程序名等等),然后通过比较读取出来的所有信息中是否包含有我们想要判断的程序的程序名来实现的,如下代码中,在start函数的第一个参数是应用程序名,第二个参数是参数一程序启动时输入的启动参数,/FI表示利用其后的条件筛选出所有符合条件的进程信息,imagename eq appName 表示匹配所有字符串为appName的信息。完整参数为 /FI imagename eq appName,表示筛选出包含有appName字符串的所有进程。(对于tasklist不多做介绍,百度上有很多详细的介绍)
bool CheckAppStatus(const QString &appName)
{
#ifdef Q_OS_WIN //表示如果在windows下
QProcess process;
process.start("tasklist" ,QStringList()<<"/FI"<<"imagename eq " +appName); //执行tasklist程序
process.waitForFinished(5000); //阻塞5秒等待tasklist程序执行完成,超过五秒则直接返回
QString outputStr = QString::fromLocal8Bit(process.readAllStandardOutput()); //把tasklist程序读取到的进程信息输出到字符串中
if(outputStr.