使用 QProcess 获取所有正在运行的进程信息 [英] get all running processes info using QProcess

查看:44
本文介绍了使用 QProcess 获取所有正在运行的进程信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

几天前我问到如何使用 QProcess 获取系统中所有正在运行的进程.我找到了一个可以将所有进程输出到一个文件的命令行:

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 获取标题

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

这将创建包含系统中所有正在运行的进程的 C:\ProcessList.txt 文件.我想知道如何使用 QProcess 运行它并将其输出传递给变量.

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

我根本不想创建 process.txt,而是将所有输出都放到一个变量中...

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

推荐答案

您可以使用/OUTPUT:STDOUT"开关运行 wmic.exe,将进程信息直接打印到 stdout.但是,我无法通过 QProcess API 读取此信息并将其保存在变量中.这是我使用的代码:

You can run wmic.exe with "/OUTPUT:STDOUT" switch to print the process info directly to stdout. However, I was unable to read this info through QProcess API and save it in variable. Here's the code I used:

#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 echo test"的输出,但不适用于 wmic.exe.进程 wmic.exe 似乎永远不会完成,我想它的标准输出永远不会被刷新,所以你不会通过 QProcess::readAll() 收到任何东西.

This code successfully captures output of "cmd.exe /C echo test", but doesn't work on wmic.exe. It seems that process wmic.exe is never finished, and I suppose it's stdout is never flushed so you don't receive anything throught QProcess::readAll().

我能给你的帮助就这么多.也许您或其他一些 SO 用户会在上面的代码段中发现错误.

That's all help I can give you. Maybe you, or some other SO user will find bug in the snippet above.

这篇关于使用 QProcess 获取所有正在运行的进程信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆