前几天我问如何使用QProcess获得系统中所有正在运行的进程。 我发现了一个可以输出所有进程到一个文件的命令行:
C:\ WINDOWS \ system32 \ wbem \ wmic.exe“/OUTPUT:C:\ProcessList.txt PROCESS get Caption
这将创buildC:\ ProcessList.txt文件,其中包含系统中正在运行的所有进程。 我不知道如何运行它使用QProcess并将其输出到一个variables。
似乎每次我尝试运行它,并没有发生任何事情发生:
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();
我宁愿不要创buildprocess.txt,并把所有的输出到一个variables…
您可以使用“/ 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用户会在上面的代码片段中发现错误。
试试这个会运作的很好。
process.start("cmd", QStringList() << "/C" << "echo" << "process" << "get" << "caption" << "|" << "wmic");