Qt笔记-获取Windows下目前运行的进程信息
生活随笔
收集整理的這篇文章主要介紹了
Qt笔记-获取Windows下目前运行的进程信息
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
?
?
基本概念
代碼與實(shí)例
源碼下載
?
?
基本概念
知識(shí)點(diǎn)如下:
CreateToolhelp32Snapshot? ? 獲取當(dāng)前系統(tǒng)進(jìn)程快照
void Thread::getSnapshot() {HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);if(!hProcess){qDebug() << "CreateToolhelp32Snapshot failed!";return;}PROCESSENTRY32 info;info.dwSize = sizeof(PROCESSENTRY32);if(!Process32First(hProcess, &info)){qDebug() << "Process32First null";return;}bool haveNext = true;while(haveNext){haveNext = Process32Next(hProcess, &info);if(haveNext){HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, info.th32ProcessID);insertInfo(QString::number(info.th32ProcessID), QString::number(info.cntUsage),QString::number(info.th32ParentProcessID), QString::number(info.pcPriClassBase),QString::number((DWORD)hProcess), QString::fromWCharArray(info.szExeFile));// qDebug() << info.th32ProcessID << " " << info.pcPriClassBase << " " << QString::fromWCharArray(info.szExeFile) << " " << hProcess;}} // qDebug() << "Over!"; }通過(guò)此方式獲取當(dāng)前系統(tǒng)的進(jìn)程信息
?
另外一個(gè)是關(guān)于QTableWidget相關(guān)設(shè)置:
QStringList headList;headList << "進(jìn)程ID" << " 進(jìn)程名 " << "父類進(jìn)程ID" << "進(jìn)程句柄" << "優(yōu)先級(jí)";ui->tableWidget->setColumnCount(5);ui->tableWidget->setHorizontalHeaderLabels(headList); // ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableWidget->setColumnWidth(1, 150);ui->tableWidget->horizontalHeader()->setStretchLastSection(true);ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);ui->tableWidget->setShowGrid(false);設(shè)置表頭數(shù)據(jù),以及最后一列填充,以及不可編輯,以及設(shè)置每一項(xiàng)Stretch
?
?
代碼與實(shí)例
程序運(yùn)行截圖如下:
上面那有一部分關(guān)鍵代碼。
下面給出補(bǔ)充的關(guān)鍵代碼:
#include "widget.h" #include "ui_widget.h" #include "thread.h" #include <QDebug> #include <QTableWidgetItem>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);m_thread = new Thread;QStringList headList;headList << "進(jìn)程ID" << " 進(jìn)程名 " << "父類進(jìn)程ID" << "進(jìn)程句柄" << "優(yōu)先級(jí)";ui->tableWidget->setColumnCount(5);ui->tableWidget->setHorizontalHeaderLabels(headList); // ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableWidget->setColumnWidth(1, 150);ui->tableWidget->horizontalHeader()->setStretchLastSection(true);ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);ui->tableWidget->setShowGrid(false);startTimer(1000); }Widget::~Widget() {delete ui;delete m_thread; }void Widget::addNew() {QVector<ProcessInfo> vec = m_thread->getVec();for(ProcessInfo info : vec){bool have = false;for(int i = 0; i < ui->tableWidget->rowCount(); i++){if(ui->tableWidget->item(i, 0)->text() == info.processID){have = true;}}if(!have){ui->tableWidget->insertRow(0);ui->tableWidget->setItem(0, 0, new QTableWidgetItem(info.processID));ui->tableWidget->setItem(0, 1, new QTableWidgetItem(info.processName));ui->tableWidget->setItem(0, 2, new QTableWidgetItem(info.parentProcessID));ui->tableWidget->setItem(0, 3, new QTableWidgetItem(info.processHandle));ui->tableWidget->setItem(0, 4, new QTableWidgetItem(info.processPri));}} }void Widget::removeOld() {QVector<ProcessInfo> vec = m_thread->getVec();for(int i = 0; i < ui->tableWidget->rowCount(); i++){bool have = false;for(ProcessInfo info : vec){if(info.processID == ui->tableWidget->item(i, 0)->text()){have = true;continue;}}if(!have){ui->tableWidget->removeRow(i);}} }void Widget::timerEvent(QTimerEvent *event) {Q_UNUSED(event)m_thread->clearVec();m_thread->getSnapshot();addNew();removeOld(); }?
?
?
源碼下載
打包下載地址:https://github.com/fengfanchen/Qt/tree/master/ProcessList
?
?
總結(jié)
以上是生活随笔為你收集整理的Qt笔记-获取Windows下目前运行的进程信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软考系统架构师笔记-最后知识点总结(三)
- 下一篇: 系统架构师学习笔记-基于构件的开发