Qtの外部(第三者)プログラムは、起動を開始し、シャットダウンされたかどうかの判断を達成

I.概要
          この記事では、外部アプリケーションが、QProcessクラスによる起動とシャットダウンを開始したかどうか決意の実装について説明します。

第二に、外部プログラムが起動されているかどうかを判断する
        実際のプログラムに関するすべての情報をお読みQtは組み込みのタスクリストQProcessオブジェクト窓に窓からプログラムを起動し、比較することですること(プログラム名などを含む)システム上で実行されています含めるかどうかがあるからすべての情報を読んで、私たちは最初のパラメータスタート機能に実装されたプログラムを評価するプログラムのコード名は、アプリケーション名で、2番目のパラメータは起動時のパラメータであるとして、入力パラメータを起動/ FIは、全てのマッチング処理情報をフィルタリングするために後の使用条件を表すimagenameの当量のappNameは、すべての文字列情報のappNameに一致を示しています。完全なパラメータ/ FIのimagenameのEQ appNameは、特急スクリーニングプロセスは、すべてのappNameの文字列を含んでいます。(導入を行うにはない多くのタスクリストについては、Baiduの上の多くの詳細な紹介があります)

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.contains(appName))
{
process.close() //用完记得把process关闭了,否则如果重新调用这个函数可以会失败
return true;
}
else
{
  process.close();
  return false;
}
#endif
}

第三に、ランチャー
        QProcessクラスは、外部のプログラムを起動、すなわち、startDetachedを開始し、実行するために3つの機能を提供します。これらの3つの関数が外部プログラムを起動することができますが、対応の違いがあります:

開始:この機能は、私たちのプログラムが終了に従うと、プログラムがすでに開始以前に使用されているかどうかを検出するために、前の例では、この機能を終了する外部プログラムを起動します。

startDetached:この機能は、私たちのプログラムは重要ではありません同じようにプログラム外部プログラムを起動した後、その親プロセスはシステムプロセスであるので、我々は外部プログラムを実行していきます、プログラムを終了します。

実行:関数が復帰するまで、この機能は、これは更なる処理は、実装後の詰まったシーンの使用の結果を返すようにするために適切であることが必要で、これは背中に紹介する外部プログラムを終了します

コードの実装例:

startApp(const QString&name)       //name可以是程序名也可以程序所在的完整路径(如C:\myapp.exe)
{
#ifdef Q_OS_WIN
QProcess process;
process.startDetached(QString("\"%1\"").arg(name));
process.close();
#endif
}

第四に、外部プログラムをオフに
        も/ fが強制終了を表し、近づくtaskkillプログラムのウィンドウを呼び出すプログラムを閉じるには、/ IMが(Baiduの友人へのより多くのパラメータ)を指定したプロセス名を表し

直接コードに:

void killApp(const QString& appName)
{
#ifdef Q_OS_WIN
QProcess process;
QString command="taskkill /im" + appName + "/f";
process.execute(command);                 //execute执行后会一直阻塞到返回外部程序退出的代码,比如无法关闭会返回-2
process.close();
#endif
}

 

おすすめ

転載: blog.csdn.net/u014746838/article/details/92964599