【C++】使用【windwos api】获取windwos计算机的基本信息

2023-05-16

        今天来一篇获取windows计算机的基本信息的文章,包含计算机名称、操作系统版本、处理器信息、内存信息、硬盘信息、显示器信息、网络信息、驱动程序信息、电源信息、其他硬件信息。

目录

一、windwos系统包含的基本信息

二、获取信息的方法(附代码)

三、获取windwos电源信息

四、总结


一、windwos系统包含的基本信息

Windows 计算机的基本信息包括以下内容:

  1. 计算机名称:计算机的名称是由用户在安装 Windows 时指定的,可以通过计算机属性或命令行工具获取。

  2. 操作系统版本:包括 Windows 版本、版本号、服务包等信息。可以通过运行 winver 命令或者在计算机属性中查看。

  3. 处理器信息:包括制造商、型号、速度等信息。可以通过设备管理器、任务管理器或者系统信息工具来获取。

  4. 内存信息:包括总内存容量、可用内存、内存使用率等信息。可以通过任务管理器或者系统信息工具来获取。

  5. 硬盘信息:包括硬盘总容量、已用容量、可用容量等信息。可以通过资源管理器、磁盘管理器或者系统信息工具来获取。

  6. 显示器信息:包括分辨率、色彩深度、显示器型号等信息。可以通过显示器属性或者设备管理器来获取。

  7. 网络信息:包括网络适配器型号、IP 地址、MAC 地址等信息。可以通过命令行工具如 ipconfig 或者设备管理器来获取。

  8. 驱动程序信息:包括各种硬件设备的驱动程序版本号。可以通过设备管理器或者系统信息工具来获取。

  9. 电源信息:包括当前电源计划、电池电量等信息。可以通过电源选项或者电池管理器来获取。

  10. 其他硬件信息:包括键盘、鼠标、打印机等硬件设备的信息。可以通过设备管理器或者系统信息工具来获取。

二、获取信息的方法(附代码)

         以下是使用 C++ 获取 Windows 计算机基本信息的示例代码:

#include <iostream>
#include <windows.h>
#include <tchar.h>

#pragma comment(lib, "version.lib")

int main() {
    // 获取操作系统版本信息
    OSVERSIONINFOEX osvi = {0};
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    GetVersionEx((LPOSVERSIONINFO)&osvi);
    std::cout << "Operating System: Windows " << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << "." << osvi.dwBuildNumber << std::endl;

    // 获取处理器信息
    SYSTEM_INFO sysinfo = {0};
    GetSystemInfo(&sysinfo);
    std::cout << "Processor: " << sysinfo.dwNumberOfProcessors << " x " << sysinfo.dwProcessorType << " MHz" << std::endl;

    // 获取内存信息
    MEMORYSTATUSEX meminfo = {0};
    meminfo.dwLength = sizeof(MEMORYSTATUSEX);
    GlobalMemoryStatusEx(&meminfo);
    std::cout << "Memory: " << meminfo.ullTotalPhys / (1024 * 1024) << " MB" << std::endl;

    // 获取硬盘信息
    ULARGE_INTEGER diskinfo = {0};
    GetDiskFreeSpaceEx(_T("C:\\"), NULL, &diskinfo, NULL);
    std::cout << "Disk: " << diskinfo.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl;

    // 获取显示器信息
    HDC hdc = GetDC(NULL);
    int width = GetDeviceCaps(hdc, HORZRES);
    int height = GetDeviceCaps(hdc, VERTRES);
    int bpp = GetDeviceCaps(hdc, BITSPIXEL);
    ReleaseDC(NULL, hdc);
    std::cout << "Display: " << width << " x " << height << " x " << bpp << " bits" << std::endl;

    // 获取网络信息
    IP_ADAPTER_INFO* adapterinfo = NULL;
    DWORD buflen = 0;
    GetAdaptersInfo(NULL, &buflen);
    adapterinfo = (IP_ADAPTER_INFO*) malloc(buflen);
    GetAdaptersInfo(adapterinfo, &buflen);
    std::cout << "Network: " << adapterinfo->IpAddressList.IpAddress.String << std::endl;
    free(adapterinfo);

    // 获取驱动程序信息
    TCHAR filename[MAX_PATH] = {0};
    GetModuleFileName(NULL, filename, MAX_PATH);
    DWORD handle = 0;
    DWORD size = GetFileVersionInfoSize(filename, &handle);
    if (size > 0) {
        BYTE* buffer = new BYTE[size];
        if (GetFileVersionInfo(filename, handle, size, buffer)) {
            VS_FIXEDFILEINFO* fileInfo = NULL;
            UINT len = 0;
            if (VerQueryValue(buffer, _T("\\"), (void**)&fileInfo, &len)) {
                std::cout << "Driver Version: " << HIWORD(fileInfo->dwProductVersionMS) << "." << LOWORD(fileInfo->dwProductVersionMS) << "." << HIWORD(fileInfo->dwProductVersionLS) << "." << LOWORD(fileInfo->dwProductVersionLS) << std::endl;
            }
        }
        delete[] buffer;
    }

    return 0;
}

        在代码中,我们首先获取操作系统版本信息,包括主版本号、次版本号和构建号。然后获取处理器信息,包括处理器数量和主频。接着获取内存信息,包括总内存大小。然后获取硬盘信息,包括剩余磁盘空间大小。接着获取显示器信息,包括屏幕分辨率和位深。然后获取网络信息,包括本地 IP 地址。最后获取驱动程序信息,包括文件版本号。

        注意,这些信息只是 Windows 计算机的基本信息,还有许多其他的系统信息可以获取,例如电源状态、进程列表、网络连接等等,需要调用不同的 Windows API 函数来获取。

三、获取windwos电源信息

        以下是使用 C++ 获取 Windows 电源信息的代码:

#include <Windows.h>
#include <PowrProf.h>
#include <iostream>

#pragma comment(lib, "PowrProf.lib")

int main()
{
    SYSTEM_POWER_STATUS powerStatus;

    if (GetSystemPowerStatus(&powerStatus))
    {
        std::cout << "AC Line Status: " << static_cast<int>(powerStatus.ACLineStatus) << std::endl;
        std::cout << "Battery Flag: " << static_cast<int>(powerStatus.BatteryFlag) << std::endl;
        std::cout << "Battery Life Percent: " << static_cast<int>(powerStatus.BatteryLifePercent) << std::endl;
        std::cout << "Battery Life Time: " << powerStatus.BatteryLifeTime << std::endl;
        std::cout << "Battery Full Life Time: " << powerStatus.BatteryFullLifeTime << std::endl;
    }
    else
    {
        std::cerr << "Failed to get power status." << std::endl;
    }

    return 0;
}

        这个程序使用了 Windows API 函数 GetSystemPowerStatus 来获取系统的电源状态。如果成功获取了电源状态,就会输出以下信息:

  • AC Line Status:表示电源是否连接到电网,1 表示已连接,0 表示未连接。
  • Battery Flag:表示电池的状态,0 表示没有电池,1 表示电池正在使用,2 表示电池在充电,3 表示电池已满。
  • Battery Life Percent:表示电池剩余电量百分比,-1 表示无法获取。
  • Battery Life Time:表示电池的剩余使用时间(单位为秒),-1 表示无法获取。
  • Battery Full Life Time:表示电池的满电使用时间(单位为秒),-1 表示无法获取。

四、总结

        windows的基础信息也是计算机的资源的一种,我们可以使用微软提供的api来完整基础信息的获取。在计算机程序的发版中,针对不同的计算机基础信息我们同样可以安装不同的版本或者区别对待,已完成对用户的助力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】使用【windwos api】获取windwos计算机的基本信息 的相关文章

随机推荐

  • 记录JPA并发save时遇到的坑

    前言 在JPA中 xff0c 使用save方法时是这样的 xff1a 如果我们save的对象指定了主键 xff0c 那么会根据主键先进行一次查询 xff0c 如果查询记录不存在则执行insert语句 xff0c 如果查询记录存在则执行upd
  • Openmv(一)OpenMV图像处理的基本方法

    一 图像处理基础知识 摄像头 xff1a 光学信号转换成电信号 计算机视觉中 xff0c 最简单的模型是小孔成像模型 小孔成像是一种理想模型 xff0c 实际镜头会存在场曲和畸变等 xff0c 但可以通过在标定过程中引入畸变参数解决 xff
  • CMakeLists详解

    CMakeLists详解 一 CMake简介 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 二 常用命令 1 指定cmake最小版本 cma
  • c++继承与多态总结

    不知不觉C 43 43 课程的学习已经接近尾声 xff0c 感觉自己对于c 43 43 的认知更近了一步 xff0c 粗略总结一下最近学习的继承与多态部分的知识 继承 C 43 43 的继承 继承有3种形式 xff1a 私有继承 保护继承
  • C++对象的销毁

    对象的销毁 一般来说 xff0c 需要销毁的对象都应该做清理 解决方案 1 为每个类都提供一个public的free函数 xff1b 2 对象不再需要时立即调用free函数进行清理 析构函数 1 C 43 43 的类中可以定义一个特殊的清理
  • C++中类中的函数重载

    类中的函数重载 函数重载的回顾 1 函数重载的本质就是为相互独立的不同函数 xff1b 2 C 43 43 中通过函数名和函数参数确定函数调用 xff1b 3 无法直接通过函数名得到重载函数的入口地址 xff1b 4 函数重载必然发生在同一
  • C++中的字符串类

    字符串类 历史遗留的问题 1 C语言不支持真正意义上的字符串 xff1b 2 C语言用字符数组和一组实现字符串操作 xff1b 3 C语言不支持自定义类型 xff0c 因此无法获得字符类型 xff1b 解决方案 1 从C到C 43 43 的
  • MySQL中的Block Nested Loop优化分析

    前言 一般在MySQL规范中 xff0c 都会规定如果两张表进行join查询 xff0c 那么join的字段一定要有索引 xff0c 在之前的文章中我们分析了MySQL join大小表前后顺序影响分析 xff0c 这是在有索引的情况下 xf
  • C++之类模板的概念和意义

    类模板 一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元素的具体类型无关 如 xff1a 数组类 链表类 Stack Queue类 等 1 C 43 43 中将模板的思想应用于类 xff0c 使得类的实现不关注数据元素的具体类型
  • C++之单例类模板

    需求的提出 在架构设计时 xff0c 某些类在整个系统生命周期中最多只能有一个对象存在 xff08 Single Instance xff09 要控制类的对象数目 xff0c 必须对外隐藏构造函数 xff1b 思路 xff1a 1 将构造函
  • 【无标题】

    绘图控件GraphicsView 一 GraphicsView简介 1 QT有多种绘图相关的技术 xff0c 我们将在第2部分 2 4 QT绘图和图表 中比较详细系统的讲 2 本节简单讲一下GraphicsView的基本理论 xff0c 并
  • uboot源码分析之start.S解析

    1 start S引入 1 1 u boot lds中找到start S入口 1 在uboot中因为有汇编阶段参与 xff0c 因此不能直接找main c 整个程序的入口取决于链接脚本中ENTRY声明的地方 ENTRY start 因此 s
  • uboot启动第二阶段

    uboot启动第二阶段 start armboot函数简介 一个很长的函数 1 这个函数在uboot lib arm board c的第444行开始到908行结束 2 450行还不是全部 xff0c 因为里面还调用了别的函数 3 为什么这么
  • cmake设置编译类型为release命令

    cmake编译类型通常默认为debug xff0c 但是在编译软件时 xff0c 一般都需要使用release版本的 xff0c debug太慢了 设置为release版本可以在cmake文件里进行 xff0c 也可以在运行cmake命令时
  • 设计模式之单例模式(Singleton),以C++为例,实现日志输出。

    Hello大家好 xff0c 好久没更新了 xff0c 今天给大家补上最基础的设计模式 xff1a 单例模式 这个单例模式实在是我的心结啊 xff0c 2021年末左右面试京东算法岗 xff0c 面试官让我写一个单例 xff0c 没写出来
  • 源码分析MyBatis对数值(int、double)类型进行test判断的误区

    文章目录 问题描述问题分析验证解析表达式执行解析后表达式分别测试两个条件 查询Ognl官方文档验证问题解决 问题描述 在如下判断中 xff0c 如果type类型为int xff0c 那么对于type 61 39 39 部分判断会出现一些问题
  • Git报错:error: xxxx bytes of body are still expected.

    git一个很老的项目 xff0c 项目深度很深 xff0c 报错 xff1a error 7857 bytes of body are still expected fetch pack unexpected disconnect whil
  • 设计模式之代理模式(Proxy),以C++为例,实现远程代理、虚拟代理、保护代理等。

    兄弟姐妹们好 xff0c 又是好久没有更新了 xff0c 今天给大家简单介绍代理模式 xff0c 一个很简单的设计模式 xff0c 旨在不改变原对象的情况下通过代理对象来控制对原对象的访问 代理模式根据具体情况还可以分为远程代理 虚拟代理
  • C++ 互斥锁原理以及实际使用介绍

    兄弟姐妹们 xff0c 我又回来了 xff0c 今天带来实际开发中都需要使用的互斥锁的内容 xff0c 主要聊一聊如何使用互斥锁以及都有哪几种方式实现互斥锁 实现互斥 xff0c 可以有以下几种方式 xff1a 互斥量 xff08 Mute
  • 【C++】使用【windwos api】获取windwos计算机的基本信息

    今天来一篇获取windows计算机的基本信息的文章 xff0c 包含计算机名称 操作系统版本 处理器信息 内存信息 硬盘信息 显示器信息 网络信息 驱动程序信息 电源信息 其他硬件信息 目录 一 windwos系统包含的基本信息 二 获取信