写点什么

Qt 知识点梳理 —— 获取设备 CPU、内存、磁盘等硬件信息

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:2868 字

    阅读完需:约 9 分钟

获取CPU序列号


获取内存信息


获取第一个磁盘序列号


获取磁盘信息


获取操作系统信息


获取主板序列号


获取网卡MAC地址


获取设备联网状态


运行效果


项目源码


开发环境




简介


--


工业应用领域,我们经常需要获取设备的硬件及软件信息,用以做设备软硬件判断,在此将常用的方法汇总,以便后续直接调用; 源码中已将方法封装为标准类,欢迎补充;


其中包括:电脑名称、CPU 信息、CPU 序列号、内存详细信息、磁盘序列号、磁盘详细信息、操作系统信息、主板序列号、显卡信息、所有网卡的 MAC 地址、设备联网状态;


WMIC 指令




在 Windows 环境下,我们可以通过使用 WMIC 获取设备的硬件信息,如下:


wmic cpu get Name //获取 CPU 名称


wmic cpu get NumberOfCores //获取 CPU 核心数


wmic cpu get NumberOfLogicalProcessors //获取 CPU 线程数


wmic cpu get processorid //获取 CPU 序列号


wmic baseboard get serialnumber //获取主板序列号


wmic csproduct //获取主板信息


wmic bios get serialnumber //获取 BIOS 序列号


wmic diskdrive get serialnumber //获取磁盘序列号


wmic logicaldisk get name,Description,filesystem,size,freespace //获取磁盘信息


wmic diskdrive where index=0 get serialnumber //获取第一个磁盘序列号


wmic nic where netconnectionid!=NULL get MacAddress //获取不为空的 MAC 地址


wmic memorychip get Capacity,TAG //获取内存信息


wmic os get Caption,CSDVersion,CSName,SerialNumber,Version //获取操作系统系统信息


使用,将上述指令传入即可:


//调用 Windows WMIC 指令 获取硬件信息 此方法仅适用于 Windows 环境


QString GetHardWare::GetWare(QString cmd)


{


QProcess p;


p.start(cmd);


p.waitForFinished();


QString result = QString::fromLocal8Bit(p.readAllStandardOutput());


QStringList list = cmd.split(" ");


result = result.remove(list.last(), Qt::CaseInsensitive);


result = result.replace("\r", "");


result = result.replace("\n", "");


result = result.simplified();


return result;


}


具体实现



获取电脑名称

如果此处报错,这里没详细描述,可查看:【Qt/C++异常笔记】“QHostInfo”: 不是类或命名空间名称


//获取电脑名字


QString GetHardWare::getMachineName()


{


QString machineName = QHostInfo::localHostName();


return machineName;


}

获取 CPU 信息

如:Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz


//获取 CPU 信息


QString GetHardWare::getCpuInfo()


{


return GetWare("wmic cpu get name");


}

获取 CPU 序列号

//获取 CPU 序列号


QString GetHardWare::getCpuSerial()


{


return GetWare("wmic cpu get processorid");


}

获取内存信息

返回信息依次为:已使用内存大小、未使用内存大小、总内存大小,单位为 MB;



【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


:("5041", "3001", "8042")


//获取内存信息


//返回信息依次为:已使用内存大小、未使用内存大小、总内存大小,单位为 MB


//如:("5041", "3001", "8042")


QStringList GetHardWare::getMemoryInfo()


{


QStringList m_memInfo;


int memoryPercent;


int memAll;


int memUse;


int memFree;


MEMORYSTATUSEX statex;


statex.dwLength = sizeof (statex);


GlobalMemoryStatusEx(&statex);


memoryPercent = statex.dwMemoryLoad;


memAll = statex.ullTotalPhys / MB;


memFree = statex.ullAvailPhys / MB;


memUse = memAll - memFree;


m_memInfo.append(QString::number(memUse));


m_memInfo.append(QString::number(memFree));


m_memInfo.append(QString::number(memAll));


return m_memInfo;


}

获取第一个磁盘序列号

//获取第一个磁盘序列号


QString GetHardWare::getDiskSerial()


{


return GetWare("wmic diskdrive where index=0 get serialnumber");//只能在 Windows 环境下使用


}

获取磁盘信息

返回信息依次为:磁盘名称、已使用空间大小、未使用空间大小、总空间大小、使用百分比;


如:?(("C:/", "92.9G", "122.5G", "215.5G", "43"),


("D:/", "175.8G", "135.2G", "311.0G", "56"),


("E:/", "90.9G", "220.1G", "311.0G", "29"),


("F:/", "243.1G", "66.4G", "309.5G", "78"))


//获取磁盘信息


//返回信息依次为:磁盘名称、已使用空间大小、未使用空间大小、总空间大小、使用百分比


//如: (("C:/", "92.9G", "122.5G", "215.5G", "43"),


// ("D:/", "175.8G", "135.2G", "311.0G", "56"),


// ("E:/", "90.9G", "220.1G", "311.0G", "29"),


// ("F:/", "243.1G", "66.4G", "309.5G", "78"))


QList<QStringList> GetHardWare::getDiskInfo()


{


QList<QStringList> diskList;


QFileInfoList list = QDir::drives();


foreach (QFileInfo dir, list)


{


QStringList curDisk;


QString dirName = dir.absolutePath();


LPCWSTR lpcwstrDriver = (LPCWSTR)dirName.utf16();


ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;


if(GetDiskFreeSpaceEx(lpcwstrDriver, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes) )


{


//已使用的空间大小


QString use = QString::number((double) (liTotalBytes.QuadPart - liTotalFreeBytes.QuadPart) / GB, 'f', 1);


use += "G";


//未使用的空间大小


QString free = QString::number((double) liTotalFreeBytes.QuadPart / GB, 'f', 1);


free += "G";


//总空间大小


QString all = QString::number((double) liTotalBytes.QuadPart / GB, 'f', 1);


all += "G";


//使用率百分比


int percent = 100 - ((double)liTotalFreeBytes.QuadPart / liTotalBytes.QuadPart) * 100;


curDisk.append(dirName);


curDisk.append(use);


curDisk.append(free);


curDisk.append(all);


curDisk.append(QString::number(percent));


}


diskList.append(curDisk);


}


return diskList;


}

获取操作系统信息

如:Windows 10 Version 1909 64bit


//获取系统信息


//如:Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz


QString GetHardWare::getOSInfo()


{


QString m_osInfo;


typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);


LPFN_ISWOW64PROCESS fnIsWow64Process;


BOOL bIsWow64 = FALSE;


fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(TEXT("kernel32")),"IsWow64Process");


if (NULL != fnIsWow64Process)


{


fnIsWow64Process(GetCurrentProcess(),&bIsWow64);


}


QString sysBit = "unknown";


if(bIsWow64)


sysBit = "64bit";


else


sysBit = "32bit";


m_osInfo = QSysInfo::prettyProductName() + " " + sysBit;


return m_osInfo;


}

获取主板序列号

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Qt知识点梳理 —— 获取设备CPU、内存、磁盘等硬件信息