Qt知识点梳理

您所在的位置:网站首页 联想mac地址怎么查询序列号信息 Qt知识点梳理

Qt知识点梳理

2024-07-10 11:39| 来源: 网络整理| 查看: 265

文章目录

简介

WMIC指令

具体实现

获取电脑名称

获取CPU信息

获取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;

如:("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 GetHardWare::getDiskInfo() { QList 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; } 获取主板序列号 //获取主板序列号 QString GetHardWare::getBiosSerial() { return GetWare("wmic baseboard get serialnumber"); } 获取网卡MAC地址

如:("00:15:5D:A2:BD:C7", "00:50:56:C0:00:01", "00:50:56:C0:00:08", "D8:F2:CA:6D:6A:2D")

//获取所有网卡的MAC地址 //如:("00:15:5D:A2:BD:C7", "00:50:56:C0:00:01", "00:50:56:C0:00:08", "D8:F2:CA:6D:6A:2D") QStringList GetHardWare::getMacAddress() { QStringList macList; QList netList = QNetworkInterface::allInterfaces(); foreach(QNetworkInterface item, netList)//遍历所有网卡 { if((QNetworkInterface::IsUp & item.flags()) && (QNetworkInterface::IsRunning & item.flags()) && (item.hardwareAddress().toStdString().length()>0)) { macList.append(item.hardwareAddress()); } } return macList; } 获取设备联网状态

如果设备已连接外网,则返回True;否则返回False

//获取联网状态 bool GetHardWare::getInternetState() { //能ping的通百度则说明可以联网 QTcpSocket tcpClient; tcpClient.abort(); tcpClient.connectToHost("www.baidu.com", 80); //100毫秒没有连接上则判断不在线 return tcpClient.waitForConnected(100); } 运行效果 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3