qt 获取系统主机名、UID序列号、以及磁盘空间等其他信息

2024-06-22 17:12

本文主要是介绍qt 获取系统主机名、UID序列号、以及磁盘空间等其他信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用qt接口获取系统主机名、UID序列号、以及磁盘空间、当前网络传输速率,显卡参数等

void logPCInfo()
{
    LOG_FUN(LOG_LEVEL_INFO, "Host Name: %s", QSysInfo::machineHostName().toStdString().c_str());
    LOG_FUN(LOG_LEVEL_INFO, "Machine Unique Id: %s", QSysInfo::machineUniqueId().toStdString().c_str());
    LOG_FUN(LOG_LEVEL_INFO, "Oper System Name: %s", QSysInfo::prettyProductName().toStdString().c_str());
    LOG_FUN(LOG_LEVEL_INFO, "CPU Architecture: %s", QSysInfo::currentCpuArchitecture().toStdString().c_str());

    CPUID cpuID[3] = { CPUID(2147483650), CPUID(2147483651), CPUID(2147483652) };

    std::string vendor;
    for (int i = 0; i < 3; i++) {
        vendor += std::string((const char *)&cpuID[i].EAX(), 4);
        vendor += std::string((const char *)&cpuID[i].EBX(), 4);
        vendor += std::string((const char *)&cpuID[i].ECX(), 4);
        vendor += std::string((const char *)&cpuID[i].EDX(), 4);
    }

    LOG_FUN(LOG_LEVEL_INFO, "CPU Info: %s", vendor.c_str());

    int nMB = 1024 * 1024;
    MEMORYSTATUSEX statex;
    statex.dwLength = sizeof(statex);
    GlobalMemoryStatusEx(&statex);
    ULONGLONG totalMem = statex.ullTotalPhys / nMB;
    ULONGLONG freeMem = statex.ullAvailPhys / nMB;

    LOG_FUN(LOG_LEVEL_INFO, "Memory Space: Total %d MB, Free Space: %d MB", totalMem, freeMem);

    QStorageInfo SD;
    SD.setPath(GetDataDir());
    SD.refresh();

    LOG_FUN(LOG_LEVEL_INFO, "Physical Disk Space: %d MB, Available Space: %d MB", SD.bytesTotal() / nMB, SD.bytesAvailable() / nMB);

    SYSTEM_POWER_STATUS powerStatus;
    if (GetSystemPowerStatus(&powerStatus)) 
    {
        if (powerStatus.ACLineStatus == 1)
        {
            LOG_FUN(LOG_LEVEL_INFO, "Power Status: The laptop is plugged in");
        }
        else if (powerStatus.ACLineStatus == 0) 
        {
            LOG_FUN(LOG_LEVEL_INFO, "Power Status: The laptop is running on battery");
        }
        else 
        {
            LOG_FUN(LOG_LEVEL_INFO, "Power Status: The AC line status is unknown");
        }
    }
    else 
    {
        LOG_FUN(LOG_LEVEL_INFO, "Power Status: Failed to get system power status");
    }

    IP_ADAPTER_INFO* adapterInfo;
    ULONG bufferSize = sizeof(IP_ADAPTER_INFO);
    adapterInfo = (IP_ADAPTER_INFO*)malloc(bufferSize);

    if (GetAdaptersInfo(adapterInfo, &bufferSize) == ERROR_BUFFER_OVERFLOW) {
        free(adapterInfo);
        adapterInfo = (IP_ADAPTER_INFO*)malloc(bufferSize);
        GetAdaptersInfo(adapterInfo, &bufferSize);
    }

    IP_ADAPTER_INFO* currentAdapter = adapterInfo;
    while (currentAdapter) {
        QString ipaddr = QString::fromLatin1(currentAdapter->IpAddressList.IpAddress.String, 16);
        if (ipaddr.contains("169.254.1.10"))
        {
            QString description = QString::fromLatin1(currentAdapter->Description, 132);
            m_activeNetCardName = description;
            auto activeSpeed = GetNetWorkSpeed();
            LOG_FUN(LOG_LEVEL_INFO, "Active Network card : %s, active speed: %dMbps", description.toStdString().c_str(), activeSpeed / 1000 /1000);
        }

        currentAdapter = currentAdapter->Next;
    }

    free(adapterInfo);

    QProcess cudaProcess;
    cudaProcess.start("nvidia-smi");
    cudaProcess.waitForFinished();
    QString cudaInfo = QString::fromLocal8Bit(cudaProcess.readAllStandardOutput());
    auto driverIndex = cudaInfo.indexOf("Driver Version");
    auto cudaIndex = cudaInfo.indexOf("CUDA Version");
    auto driverVer = cudaInfo.mid(driverIndex, cudaIndex - driverIndex);
    LOG_FUN(LOG_LEVEL_INFO, "GPU %s", driverVer.toStdString().c_str());
}

这篇关于qt 获取系统主机名、UID序列号、以及磁盘空间等其他信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084902

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重