網站首頁 編程語言 正文
一、項目介紹
本文介紹利用QProcess獲取計算機的CPU、主板、硬盤等電腦相關硬件信息。
windows提供了“wmic”(Windows Management Instrumentation,Windows管理工具),提供了從命令行接口和批命令腳本執行系統管理的支持。可以打開cmd在其中輸入如下命令,獲取相關的信息。
//獲取cpu名稱
wmic cpu get Name
//獲取cpu核心數
wmic cpu get NumberOfCores
//獲取cpu線程數
wmic cpu get NumberOfLogicalProcessors
//查詢cpu:
wmic cpu get processorid
//查詢主板:
wmic baseboard get serialnumber
//查詢BIOS:
wmic bios get serialnumber
//查看硬盤:
wmic diskdrive get serialnumber
//獲取主板序唯一標識:
wmic csproduct get uuid
//查詢網卡連接唯一標識:
Wmic Path Win32_NetworkAdapter get GUID
//查詢網卡物理地址:
Wmic Path Win32_NetworkAdapter get NetEnabled
//查詢網卡是否啟用:
Wmic Path Win32_NetworkAdapter get NetEnabled
//查詢網卡是否為物理適配器:
Wmic Path Win32_NetworkAdapter get PhysicalAdapter
//查詢網卡索引號:
Wmic Path Win32_NetworkAdapter get Index
二、項目基本配置
新建一個Qt案例,項目名稱為“InfoTest”,基類選擇“QWidget”,取消選中創建UI界面復選框,完成項目創建。
【注意事項】:本程序僅限于Qt5可運行,Qt6不支持運行。關于Qt6中如何運行,可以直接看本文最后一部分
三、UI界面設置
無UI界面
四、主程序實現
4.1 widget.h頭文件
首先在頭文件中定義一個私有函數:
private:
QString getInfo(const QString &cmd);
和8個公有函數:
public:
QString getCpuName();
QString getCpuCore();
QString getCpuProcessors();
QString getCpuProcessorid();
QString getBaseboardSerialnumber();
QString getBiosSerialnumber();
QString getBaseboardUuid();
QString getDiskSerialnumber();
4.2 widget.cpp源文件
定義getInfo函數:
QString Widget::getInfo(const QString &cmd)
{
QProcess p; //啟動外部程序
p.start(cmd); //一體式啟動,不分離,主程序退出則啟動程序退出,使用close關閉
//p.startDetached(cmd) //分離式啟動,主程序退出后,外部程序繼續運行
p.waitForFinished(-1); //超時等待,設置為-1,直到執行完成
QString result = QString::fromLocal8Bit(p.readAllStandardOutput());//讀取運行結果
QStringList list = cmd.split(" "); //將cmd按空格拆分
result = result.remove(list.last(), Qt::CaseInsensitive);//刪除cmd序列中最后一個元素
result = result.replace("\r", ""); //刪除\r
result = result.replace("\n", ""); //刪除\n
result = result.simplified(); //移除字符串兩端的空白字符
p.close();
return result;
}
接著定義七個函數獲取計算機相關硬件信息,如CPU、CPU核心數、CPU線程數等,代碼如下:
//查詢CPU型號
QString Widget::getCpuName()
{
return getInfo("wmic cpu get Name");
}
//查詢CPU核心數
QString Widget::getCpuCore()
{
return getInfo("wmic cpu get NumberOfCores");
}
//查詢CPU線程數
QString Widget::getCpuProcessors()
{
return getInfo("wmic cpu get NumberOfLogicalProcessors");
}
//查詢CPU處理器標識符
QString Widget::getCpuProcessorid()
{
return getInfo("wmic cpu get processorid");
}
//查詢主板序列號
QString Widget::getBaseboardSerialnumber()
{
return getInfo("wmic baseboard get serialnumber");
}
//查詢BIOS序列號
QString Widget::getBiosSerialnumber()
{
return getInfo("wmic bios get serialnumber");
}
//查詢主板唯一標識符
QString Widget::getBaseboardUuid()
{
return getInfo("wmic csproduct get uuid");
}
//查詢硬盤標識符
QString Widget::getDiskSerialnumber()
{
return getInfo("wmic diskdrive get serialnumber");
}
最后在構造函數中引用如上函數:
首先構造界面布局:(也可以在ui中直接新建布局)
//新建布局
QLabel *cpuLabel=new QLabel("CPU:");
QLineEdit *cpuLineEdit=new QLineEdit;
QLabel *coreLabel=new QLabel("CPU核心數:");
QLineEdit *coreLineEdit=new QLineEdit;
QLabel *threadLabel=new QLabel("CPU線程數:");
QLineEdit *threadLineEdit=new QLineEdit;
QLabel *idLabel=new QLabel("CPU處理器標識符:");
QLineEdit *idLineEdit=new QLineEdit;
QLabel *baseboardLabel=new QLabel("主板序列號:");
QLineEdit *baseboardLineEdit=new QLineEdit;
QLabel *biosLabel=new QLabel("Bios序列號:");
QLineEdit *biosLineEdit=new QLineEdit;
QLabel *BidLabel=new QLabel("主板標識符:");
QLineEdit *BidLineEdit=new QLineEdit;
QLabel *diskLabel=new QLabel("硬盤序列號:");
QLineEdit *diskLineEdit=new QLineEdit;
//布局
QGridLayout *Layout=new QGridLayout(this);
Layout->addWidget(cpuLabel,0,0);
Layout->addWidget(cpuLineEdit,0,1);
Layout->addWidget(coreLabel,1,0);
Layout->addWidget(coreLineEdit,1,1);
Layout->addWidget(threadLabel,2,0);
Layout->addWidget(threadLineEdit,2,1);
Layout->addWidget(idLabel,3,0);
Layout->addWidget(idLineEdit,3,1);
Layout->addWidget(baseboardLabel,4,0);
Layout->addWidget(baseboardLineEdit,4,1);
Layout->addWidget(biosLabel,5,0);
Layout->addWidget(biosLineEdit,5,1);
Layout->addWidget(BidLabel,6,0);
Layout->addWidget(BidLineEdit,6,1);
Layout->addWidget(diskLabel,7,0);
Layout->addWidget(diskLineEdit,7,1);
構造后界面如下:
然后引用函數獲取硬件信息:
//獲取硬件信息
cpuLineEdit->setText(getCpuName());
coreLineEdit->setText(getCpuCore());
threadLineEdit->setText(getCpuProcessors());
idLineEdit->setText(getCpuProcessorid());
baseboardLineEdit->setText(getBaseboardSerialnumber());
biosLineEdit->setText(getBiosSerialnumber());
BidLineEdit->setText(getBaseboardUuid());
diskLineEdit->setText(getDiskSerialnumber());
五、效果演示
完整效果如下:
原文鏈接:https://wendy.blog.csdn.net/article/details/124970277
相關推薦
- 2022-09-09 Go語言中函數可變參數(Variadic?Parameter)詳解_Golang
- 2022-07-10 SQL語句優化詳解
- 2022-03-21 C++二維數組螺旋加密信息_C 語言
- 2022-04-02 nginx網頁緩存時間的配置過程_nginx
- 2022-07-19 Python數據分析之?Matplotlib?餅圖繪制_python
- 2022-12-07 C++?兩個vector對象拼接方式_C 語言
- 2022-06-12 Python中常用的內置函數_python
- 2022-09-25 MyBatis實現多表查詢(一對一、一對多)的方式
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支