日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。