一千萬個為什麽

搜索

使用QProcess獲取所有正在運行的進程信息

幾天前,我問過如何使用QProcess獲取系統中所有正在運行的進程。 我找到了一個可以將所有進程輸出到文件的命令行:

C:\ WINDOWS \ system32 \ wbem \ wmic.exe“/OUTPUT:C:\ProcessList.txt PROCESS獲取標題

這將創建C:\ ProcessList.txt文件,其中包含系統中所有正在運行的進程。 我想知道如何使用QProcess運行它並將其輸出變為變量。

似乎每次我嘗試運行它並且沒有發生任何事情:

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();

我寧願不創建process.txt並將所有輸出都帶到變量......

最佳答案

您可以使用“/ OUTPUT:STDOUT”開關運行wmic.exe,將進程信息直接打印到stdout。但是,我無法通過QProcess API讀取此信息並將其保存在變量中。這是我使用的代碼:

#include 
#include 
#include 

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 echo test”的輸出,但不適用於wmic.exe。似乎進程wmic.exe永遠不會完成,我想它的stdout永遠不會被刷新,所以你不會通過QProcess :: readAll()收到任何東西。

這是我能給你的所有幫助。也許您或其他一些SO用戶會在上面的代碼段中找到錯誤。

轉載註明原文: 使用QProcess獲取所有正在運行的進程信息