windows 使用 QProcess 获取所有正在运行的进程信息
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2632594/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
get all running processes info using QProcess
提问by kaycee
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:
几天前,我询问了如何使用 QProcess 获取系统中所有正在运行的进程。我找到了一个可以将所有进程输出到文件的命令行:
C:\WINDOWS\system32\wbem\wmic.exe" /OUTPUT:C:\ProcessList.txt PROCESS get Caption
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.
这将创建包含系统中所有正在运行的进程的 C:\ProcessList.txt 文件。我想知道如何使用 QProcess 运行它并将其输出转换为变量。
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...
我根本不想创建 process.txt 并将所有输出带到一个变量...
采纳答案by chalup
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:
您可以使用“/OUTPUT:STDOUT”开关运行 wmic.exe 以将进程信息直接打印到标准输出。但是,我无法通过 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;
}
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().
此代码成功捕获“cmd.exe /C echo test”的输出,但不适用于 wmic.exe。似乎进程 wmic.exe 永远不会完成,我想它的标准输出永远不会被刷新,所以你不会通过 QProcess::readAll() 收到任何东西。
That's all help I can give you. Maybe you, or some other SO user will find bug in the snippet above.
这就是我能给你的所有帮助。也许您或其他一些 SO 用户会在上面的代码片段中发现错误。
回答by Sivambigai.M
Try this it will work well.
试试这个它会工作得很好。
process.start("cmd", QStringList() << "/C" << "echo" << "process" << "get" << "caption" << "|" << "wmic");