8

few days ago i asked about how to get all running processes in the system using QProcess. i found a command line that can output all processes to a file:

C:\WINDOWS\system32\wbem\wmic.exe" /OUTPUT:C:\ProcessList.txt PROCESS get Caption

this will create C:\ProcessList.txt file contains all running processes in the system. i wonder how can i run it using QProcess and take its output to a variable.

it seems every time i try to run it and read nothing happens:

QString program = "C:\\WINDOWS\\system32\\wbem\\wmic.exe";
QStringList arguments;
arguments << "/OUTPUT:C:\\ProcessList.txt" <<"PROCESS"<< "get"<< "Caption";

process->setStandardOutputFile("process.txt");
process->start(program,arguments);

QByteArray result = process->readAll();

i prefer not to create process.txt at all and to take all the output to a variable...

4

2 に答える 2

8

「/OUTPUT:STDOUT」スイッチを指定してwmic.exeを実行すると、プロセス情報を直接stdoutに出力できます。ただし、QProcess APIを介してこの情報を読み取り、変数に保存することができませんでした。これが私が使用したコードです:

#include <QtCore/QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess process;
    process.setReadChannel(QProcess::StandardOutput);
    process.setReadChannelMode(QProcess::MergedChannels);
//    process.start("cmd.exe /C echo test");
    process.start("wmic.exe /OUTPUT:STDOUT PROCESS get Caption");

    process.waitForStarted(1000);
    process.waitForFinished(1000);

    QByteArray list = process.readAll();
    qDebug() << "Read" << list.length() << "bytes";
    qDebug() << list;
}

このコードは「cmd.exe/Cエコーテスト」の出力を正常にキャプチャしますが、wmic.exeでは機能しません。プロセスwmic.exeが終了することはないようです。また、stdoutがフラッシュされることはないため、QProcess :: readAll()を介して何も受信しないと思います。

それは私があなたに与えることができるすべての助けです。たぶん、あなたや他のSOユーザーは、上記のスニペットにバグを見つけるでしょう。

于 2010-04-13T20:50:24.167 に答える
2

これを試してみてください。うまくいきます。

process.start("cmd", QStringList() << "/C" << "echo" << "process" << "get" << "caption" << "|" << "wmic");
于 2010-11-08T10:11:37.633 に答える