一、概述
本文将介绍通过QProcess类实现对外部应用程序是否已经启动的判断、启动和关闭。
二、判断外部程序是否已经启动
Qt在windows下实际上是通过QProcess对象启动windows自带的tasklist程序来读取正在系统中运行的所有程序的信息(其中包括了程序名等等),然后通过比较读取出来的所有信息中是否包含有我们想要判断的程序的程序名来实现的,如下代码中,在start函数的第一个参数是应用程序名,第二个参数是参数一程序启动时输入的启动参数,/FI表示利用其后的条件筛选出所有符合条件的进程信息,imagename eq appName 表示匹配所有字符串为appName的信息。完整参数为 /FI imagename eq appName,表示筛选出包含有appName字符串的所有进程。(对于tasklist不多做介绍,百度上有很多详细的介绍)
三、启动程序
QProcess类提供了三个函数来启动外部程序,分别是start、startDetached和execute。这三个函数都能启动外部程序,但是也有其相应的区别:
start :此函数启动的外部程序会跟随我们的程序退出而退出,这个函数在前面的检测程序是否已经启动的例子已经用到过。
startDetached:此函数启动外部程序后该程序就跟我们的程序没关系了,它的父进程是系统进程,所以我们程序退出,外部程序还会继续运行。
execute:此函数执行后会发生阻塞直到函数返回,这个适合需要得到返回结果才能进一步处理的场景使用,这个会在后面关闭外部程序中介绍到
代码实现例子:
四、关闭外部程序
关闭程序也是调用了windows自带的taskkill程序来关闭的,其中/f表示强制终止,/im表示指定的进程名(更多参数去百度啦)
直接上代码: