Qt-获取计算机信息(MACIPCPU主机名等等)

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt-获取计算机信息(MACIPCPU主机名等等)相关的知识,希望对你有一定的参考价值。

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

简介

       在我们开发软件时,会经常需要用到计算机的相关信息,基于这些信息,我们可以开发一些辅助模块。本文将分享几个可以应用在Qt中的常用函数,帮助大家更便捷地获取如下计算机信息。

  1. 主机名。
  2. CPU。
  3. MAC地址。
  4. IP地址。
  5. CPU核心数。
  6. CPU线程数(逻辑处理器)。
  7. 处理器ID。
  8. 主板序列号。
  9. Bios序列号。
  10. 硬盘驱动器序列号。

主机名

// 获取计算机名称
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);

效果图

以上是关于Qt-获取计算机信息(MACIPCPU主机名等等)的主要内容,如果未能解决你的问题,请参考以下文章

Qt-获取计算机信息(MACIPCPU主机名等等)

Qt获取本机网络信息

Qt之获取本机网络信息(MAC, IP等等,很全)

QT获取主机名称

从 C++ 中的主机名获取计算机名?

通过主机名(域名)获取IP地址,主机别名等信息