利用Qt實(shí)現(xiàn)獲取計算機(jī)的硬件信息
獲取的計算機(jī)信息包括:
1.計算機(jī)的名稱
2.所有的IP地址
3.計算機(jī)的當(dāng)前時間
4.CPU型號
5.顯卡型號(win10不兼容)
6.內(nèi)存大小
7.CPU的核數(shù)
10.獲得顯卡的內(nèi)存(win10不兼容)
#include <QtCore/QCoreApplication> #include <Windows.h> #include <QtCore\QTime> #include <QtCore\qsettings.h> #include <dxgi.h> #include <QtNetwork\qhostinfo.h> #include <QtCore\qthread.h> //需要依賴dxgi.lib庫文件 int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //獲得計算機(jī)的名稱 QString hostName = QHostInfo::localHostName(); //獲得所有的IP地址 QHostInfo hostInfo = QHostInfo::fromName(QHostInfo::localHostName()); QList<QHostAddress> listAdress = hostInfo.addresses(); QStringList ipv4List; for(int index=0; index<listAdress.size(); ++index) { if(listAdress.at(index).protocol() == QAbstractSocket::IPv4Protocol) { ipv4List.push_back(listAdress.at(index).toString()); } } //獲得計算機(jī)的當(dāng)前時間 QTime::currentTime().toString("hh::mm::ss"); //獲得CPU型號 QSettings* cpu = new QSettings("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", QSettings::NativeFormat); QString cpuDescribe = cpu->value("ProcessorNameString").toString(); delete cpu; //獲得顯卡型號(win10不兼容) QSettings *videoCard = new QSettings("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\nvlddmkm\\Device0",QSettings::NativeFormat); QString videoCardType = videoCard->value("Device Description").toString(); delete videoCard; //獲得內(nèi)存大小 MEMORYSTATUSEX statex; statex.dwLength = sizeof(statex); GlobalMemoryStatusEx(&statex); unsigned long memory_size = statex.ullTotalPhys; int memory_size_MB = static_cast<double>(statex.ullTotalPhys)/static_cast<double>(1024*1024); //獲得CPU的核數(shù) QThread::idealThreadCount(); //獲得顯卡的內(nèi)存(win10不兼容) IDXGIFactory* pFactory; IDXGIAdapter* pAdapter; std::vector<IDXGIAdapter*> vAdapters; unsigned int total_Memory = 0; int iAdapterNum = 0; HRESULT hr = CreateDXGIFactory(__uuidof(IDXGIFactory),(void**)(&pFactory)); if(FAILED(hr)) return -1; while(pFactory->EnumAdapters(iAdapterNum, &pAdapter) != DXGI_ERROR_NOT_FOUND) { vAdapters.push_back(pAdapter); ++iAdapterNum; } for(size_t i = 0; i<vAdapters.size(); ++i) { DXGI_ADAPTER_DESC adpterDesc; vAdapters[i]->GetDesc(&adpterDesc); total_Memory += adpterDesc.SharedSystemMemory; } int destInfo = total_Memory /1024/1024; return a.exec(); }
補(bǔ)充
當(dāng)然利用QT還可以獲取一些其他信息,下面是小編為大家整理的一些方法,需要的可以參考一下
獲取MAC地址
// 獲取MAC地址 QString Registration::GetMac() { // 獲取所有網(wǎng)絡(luò)接口列表 QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces(); // 遍歷接口 int nCnt = nets.count(); QString strMacAddr = ""; for(int i = 0; i < nCnt; i++) { // 網(wǎng)絡(luò)接口需被激活且正在運(yùn)行且不是回環(huán)地址,才可能是要找的地址 if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack)) { // 該mac的ip地址不能是回環(huán)地址并且是ipv4地址 for(int j = 0; j < nets[i].addressEntries().size(); j++) { if(nets[i].addressEntries().at(j).ip() != QHostAddress::LocalHost && nets[i].addressEntries().at(j).ip().protocol() == QAbstractSocket::IPv4Protocol) { strMacAddr = nets[i].hardwareAddress(); } } } } return strMacAddr; }
獲取處理器ID
通過wmic指令獲取。
// 獲取CPU處理器ID QString Registration::GetCPUProcessorid() { QString cmd = QString("wmic cpu get processorid"); return GetWMICInfo(cmd); }
獲取主板序列號
通過wmic指令獲取。
// 獲取主板序列號 QString Registration::GetBaseboardSerialnumber() { QString cmd = QString("wmic baseboard get serialnumber"); return GetWMICInfo(cmd); }
獲取BIOS序列號
通過wmic指令獲取。
// 獲取BIOS序列號 QString Registration::GetBIOSSerialnumber() { QString cmd = QString("wmic bios get serialnumber"); return GetWMICInfo(cmd); }
到此這篇關(guān)于利用Qt實(shí)現(xiàn)獲取計算機(jī)的硬件信息的文章就介紹到這了,更多相關(guān)Qt獲取計算機(jī)硬件信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(160.求兩個鏈表的交點(diǎn))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(160.求兩個鏈表的交點(diǎn)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07使用設(shè)計模式中的單例模式來實(shí)現(xiàn)C++的boost庫
這篇文章主要介紹了使用設(shè)計模式中的單例模式來實(shí)現(xiàn)C++的boost庫的方法,其中作者對線程安全格外強(qiáng)調(diào),需要的朋友可以參考下2016-03-03C語言數(shù)據(jù)結(jié)構(gòu)二叉樹先序、中序、后序及層次四種遍歷
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)二叉樹先序、中序、后序及層次四種遍歷方式,具有一定的知識性參考價值,需要的小伙伴可以先看一下2022-02-02C++ 中 const和static readonly區(qū)別
這篇文章主要介紹了C++ 中 const和static readonly區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-05-05