• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Qt-获取计算机信息MAC、IP、CPU、主机名等等

武飞扬头像
翟天保Steven
帮助3

简介

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

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

主机名

  1.  
    // 获取计算机名称
  2.  
    QString Registration::GetMachineName()
  3.  
    {
  4.  
    // 获取主机名
  5.  
    QString machineName = QHostInfo::localHostName();
  6.  
     
  7.  
    return machineName;
  8.  
    }

CPU

  1.  
    // 获取CPU信息
  2.  
    QString Registration::GetCPU()
  3.  
    {
  4.  
    // 获取CPU注册表地址
  5.  
    QSettings cpu("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", QSettings::NativeFormat);
  6.  
     
  7.  
    // 提取CPU信息
  8.  
    QString m_cpu = cpu.value("ProcessorNameString").toString();
  9.  
    return m_cpu;
  10.  
    }

 MAC地址

  1.  
    // 获取MAC地址
  2.  
    QString Registration::GetMac()
  3.  
    {
  4.  
    // 获取所有网络接口列表
  5.  
    QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();
  6.  
     
  7.  
    // 遍历接口
  8.  
    int nCnt = nets.count();
  9.  
    QString strMacAddr = "";
  10.  
    for(int i = 0; i < nCnt; i )
  11.  
    {
  12.  
    // 网络接口需被激活且正在运行且不是回环地址,才可能是要找的地址
  13.  
    if(nets[i].flags().testFlag(QNetworkInterface::IsUp) &&
  14.  
    nets[i].flags().testFlag(QNetworkInterface::IsRunning) &&
  15.  
    !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
  16.  
    {
  17.  
    // 该mac的ip地址不能是回环地址并且是ipv4地址
  18.  
    for(int j = 0; j < nets[i].addressEntries().size(); j )
  19.  
    {
  20.  
    if(nets[i].addressEntries().at(j).ip() != QHostAddress::LocalHost &&
  21.  
    nets[i].addressEntries().at(j).ip().protocol() == QAbstractSocket::IPv4Protocol)
  22.  
    {
  23.  
    strMacAddr = nets[i].hardwareAddress();
  24.  
    }
  25.  
    }
  26.  
    }
  27.  
    }
  28.  
     
  29.  
    return strMacAddr;
  30.  
    }

IP地址

  1.  
    // 获取IP地址
  2.  
    QString Registration::GetIP()
  3.  
    {
  4.  
    // 获取所有网络接口列表
  5.  
    QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();
  6.  
     
  7.  
    // 遍历接口
  8.  
    int nCnt = nets.count();
  9.  
    QString strIpAddr = "";
  10.  
    for(int i = 0; i < nCnt; i )
  11.  
    {
  12.  
    // // 网络接口需被激活且正在运行且不是回环地址,才可能是要找的地址
  13.  
    if(nets[i].flags().testFlag(QNetworkInterface::IsUp) &&
  14.  
    nets[i].flags().testFlag(QNetworkInterface::IsRunning) &&
  15.  
    !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
  16.  
    {
  17.  
    // 该mac的ip地址不能是回环地址并且是ipv4地址
  18.  
    for(int j = 0; j < nets[i].addressEntries().size(); j )
  19.  
    {
  20.  
    if(nets[i].addressEntries().at(j).ip() != QHostAddress::LocalHost &&
  21.  
    nets[i].addressEntries().at(j).ip().protocol() == QAbstractSocket::IPv4Protocol)
  22.  
    {
  23.  
    strIpAddr=nets[i].addressEntries().at(j).ip().toString();
  24.  
    }
  25.  
    }
  26.  
    }
  27.  
    }
  28.  
     
  29.  
    return strIpAddr;
  30.  
    }

获取wmic指令结果

  1.  
    // 获取WMIC指令结果
  2.  
    QString Registration::GetWMICInfo(QString cmd)
  3.  
    {
  4.  
    // cmd指令
  5.  
    QProcess Cmd;
  6.  
    Cmd.start(cmd);
  7.  
    Cmd.waitForFinished();
  8.  
     
  9.  
    // 获取输出结果
  10.  
    QString result = QString::fromLocal8Bit(Cmd.readAllStandardOutput());
  11.  
     
  12.  
    // 拆分指令字符串
  13.  
    QStringList list = cmd.split(" ");
  14.  
     
  15.  
    // 指令字符串的最后一个单词提取出来作匹配,匹配成功则在result中删除
  16.  
    // 如:wmic cpu get processorid,那么list.last()就是processorid
  17.  
    // Qt::CaseInsensitive表示无视大小写,Qt::CaseSensitive表示对大小写敏感
  18.  
    result = result.remove(list.last(), Qt::CaseInsensitive);
  19.  
     
  20.  
    // 删除输出结果中的回车和换行
  21.  
    result = result.replace("\r", "");
  22.  
    result = result.replace("\n", "");
  23.  
     
  24.  
    // 去除空格操作
  25.  
    result = result.simplified();
  26.  
     
  27.  
    return result;
  28.  
    }

CPU核心数

通过wmic指令获取。

  1.  
    // 获取CPU核心数
  2.  
    QString Registration::GetCPUNumberOfCores()
  3.  
    {
  4.  
    QString cmd = QString("wmic cpu get NumberOfCores");
  5.  
    return GetWMICInfo(cmd);
  6.  
    }

CPU线程数

通过wmic指令获取。

  1.  
    // 获取CPU线程数
  2.  
    QString Registration::GetCPUNumberOfLogicalProcessors()
  3.  
    {
  4.  
    QString cmd = QString("wmic cpu get NumberOfLogicalProcessors");
  5.  
    return GetWMICInfo(cmd);
  6.  
    }

处理器ID

通过wmic指令获取。

  1.  
    // 获取CPU处理器ID
  2.  
    QString Registration::GetCPUProcessorid()
  3.  
    {
  4.  
    QString cmd = QString("wmic cpu get processorid");
  5.  
    return GetWMICInfo(cmd);
  6.  
    }

主板序列号

通过wmic指令获取。

  1.  
    // 获取主板序列号
  2.  
    QString Registration::GetBaseboardSerialnumber()
  3.  
    {
  4.  
    QString cmd = QString("wmic baseboard get serialnumber");
  5.  
    return GetWMICInfo(cmd);
  6.  
    }

BIOS序列号

通过wmic指令获取。

  1.  
    // 获取BIOS序列号
  2.  
    QString Registration::GetBIOSSerialnumber()
  3.  
    {
  4.  
    QString cmd = QString("wmic bios get serialnumber");
  5.  
    return GetWMICInfo(cmd);
  6.  
    }

硬盘驱动器序列号

通过wmic指令获取。

  1.  
    // 获取硬盘驱动器序列号
  2.  
    QString Registration::GetDiskdriveSerialnumber()
  3.  
    {
  4.  
    QString cmd = QString("wmic diskdrive get serialnumber");
  5.  
    return GetWMICInfo(cmd);
  6.  
    }

效果图

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhffbigh
系列文章
更多 icon
同类精品
更多 icon
继续加载