简介
在我们开发软件时,会经常需要用到计算机的相关信息,基于这些信息,我们可以开发一些辅助模块。本文将分享几个可以应用在Qt中的常用函数,帮助大家更便捷地获取如下计算机信息。
- 主机名。
- CPU。
- MAC地址。
- IP地址。
- CPU核心数。
- CPU线程数(逻辑处理器)。
- 处理器ID。
- 主板序列号。
- BIOS序列号。
- 硬盘驱动器序列号。
主机名
// 获取计算机名称 QString Registration::GetMachineName() { // 获取主机名 QString machineName = QHostInfo::localHostName(); return machineName; }
CPU
// 获取CPU信息 QString Registration::GetCPU() { // 获取CPU注册表地址 QSettings cpu("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", QSettings::NativeFormat); // 提取CPU信息 QString m_cpu = cpu.value("ProcessorNameString").toString(); return m_cpu; }
MAC地址
// 获取MAC地址 QString Registration::GetMac() { // 获取所有网络接口列表 QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces(); // 遍历接口 int nCnt = nets.count(); QString strMacAddr = ""; for(int i = 0; i < nCnt; i++) { // 网络接口需被激活且正在运行且不是回环地址,才可能是要找的地址 if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack)) { // 该mac的ip地址不能是回环地址并且是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; }
IP地址
// 获取IP地址 QString Registration::GetIP() { // 获取所有网络接口列表 QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces(); // 遍历接口 int nCnt = nets.count(); QString strIpAddr = ""; for(int i = 0; i < nCnt; i++) { // // 网络接口需被激活且正在运行且不是回环地址,才可能是要找的地址 if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack)) { // 该mac的ip地址不能是回环地址并且是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) { strIpAddr=nets[i].addressEntries().at(j).ip().toString(); } } } } return strIpAddr; }
获取wmic指令结果
// 获取WMIC指令结果 QString Registration::GetWMICInfo(QString cmd) { // cmd指令 QProcess Cmd; Cmd.start(cmd); Cmd.waitForFinished(); // 获取输出结果 QString result = QString::fromLocal8Bit(Cmd.readAllStandardOutput()); // 拆分指令字符串 QStringList list = cmd.split(" "); // 指令字符串的最后一个单词提取出来作匹配,匹配成功则在result中删除 // 如:wmic cpu get processorid,那么list.last()就是processorid // Qt::CaseInsensitive表示无视大小写,Qt::CaseSensitive表示对大小写敏感 result = result.remove(list.last(), Qt::CaseInsensitive); // 删除输出结果中的回车和换行 result = result.replace("\r", ""); result = result.replace("\n", ""); // 去除空格操作 result = result.simplified(); return result; }
CPU核心数
通过wmic指令获取。
// 获取CPU核心数 QString Registration::GetCPUNumberOfCores() { QString cmd = QString("wmic cpu get NumberOfCores"); return GetWMICInfo(cmd); }
CPU线程数
通过wmic指令获取。
// 获取CPU线程数 QString Registration::GetCPUNumberOfLogicalProcessors() { QString cmd = QString("wmic cpu get NumberOfLogicalProcessors"); return GetWMICInfo(cmd); }
处理器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); }
硬盘驱动器序列号
通过wmic指令获取。
// 获取硬盘驱动器序列号 QString Registration::GetDiskdriveSerialnumber() { QString cmd = QString("wmic diskdrive get serialnumber"); return GetWMICInfo(cmd); }
效果图