首頁 > 軟體

QT利用QProcess獲取計算機硬體資訊

2022-06-15 18:01:23

一、專案介紹

本文介紹利用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());

五、效果演示

完整效果如下:

到此這篇關於QT利用QProcess獲取計算機硬體資訊的文章就介紹到這了,更多相關QT獲取計算機硬體資訊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com