當前位置:
首頁 >
Qt笔记-获取Windows下目前运行的进程信息
發(fā)布時間:2025/3/15
27
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Qt笔记-获取Windows下目前运行的进程信息
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
?
?
基本概念
代碼與實例
源碼下載
?
?
基本概念
知識點如下:
CreateToolhelp32Snapshot? ? 獲取當前系統(tǒng)進程快照
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!"; }通過此方式獲取當前系統(tǒng)的進程信息
?
另外一個是關于QTableWidget相關設置:
QStringList headList;headList << "進程ID" << " 進程名 " << "父類進程ID" << "進程句柄" << "優(yōu)先級";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ù)據(jù),以及最后一列填充,以及不可編輯,以及設置每一項Stretch
?
?
代碼與實例
程序運行截圖如下:
上面那有一部分關鍵代碼。
下面給出補充的關鍵代碼:
#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 << "進程ID" << " 進程名 " << "父類進程ID" << "進程句柄" << "優(yōu)先級";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下目前运行的进程信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考系统架构师笔记-最后知识点总结(三)
- 下一篇: 系统架构师学习笔记-基于构件的开发