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

简介: Qt-获取计算机信息(MAC、IP、CPU、主机名等等)

简介

      在我们开发软件时,会经常需要用到计算机的相关信息,基于这些信息,我们可以开发一些辅助模块。本文将分享几个可以应用在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);
}

效果图

相关文章
|
8月前
|
存储 缓存 Linux
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
941 8
|
10月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
2012 23
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
178 0
|
网络协议
【qt】TCP客户端信息的接受和发送
【qt】TCP客户端信息的接受和发送
113 0
|
网络协议
【qt】TCP 服务端怎么收到信息?
【qt】TCP 服务端怎么收到信息?
168 0
【qt】如何获取本地的主机名?
【qt】如何获取本地的主机名?
123 0
|
缓存 监控 Linux
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
4856 2
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
481 1
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
870 5

推荐镜像

更多
  • qt