C++使用windwos api实现获取计算机基本信息

 更新时间:2023年04月26日 08:30:34   作者:Thomas_Lbw  
这篇文章主要为大家详细介绍了C++如何使用windwos api实现获取windwos计算机的基本信息,包括计算机名称、操作系统版本、处理器信息等,需要的可以参考一下

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

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

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

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

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

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

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

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

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

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

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

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

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

以下是使用 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来完整基础信息的获取。在计算机程序的发版中,针对不同的计算机基础信息我们同样可以安装不同的版本或者区别对待,已完成对用户的助力。

到此这篇关于C++使用windwos api实现获取计算机基本信息的文章就介绍到这了,更多相关C++获取计算机基本信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中关于=default和=delete问题

    C++中关于=default和=delete问题

    这篇文章主要介绍了C++中关于=default和=delete问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • C++ 异常处理机制与自定义异常体系处理方式

    C++ 异常处理机制与自定义异常体系处理方式

    本节将详细介绍C++异常处理的相关概念、用法以及如何通过自定义异常体系来满足程序的需求,同时,我们将对比C语言的传统错误处理方式,分析C++异常机制的优缺点,并探讨标准库中提供的异常体系,帮助开发者更好地理解和使用C++的异常处理功能,感兴趣的朋友一起看看吧
    2024-12-12
  • c++ 端口扫描程序实现案例

    c++ 端口扫描程序实现案例

    下面小编就为大家带来一篇c++ 端口扫描程序实现案例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C++中类的默认成员函数详解

    C++中类的默认成员函数详解

    大家好,本篇文章主要讲的是C++中类的默认成员函数详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • VS2022 无法打开源文件“stdio.h”问题解决

    VS2022 无法打开源文件“stdio.h”问题解决

    本文主要介绍了VS2022 无法打开源文件“stdio.h”问题解决,文中通过图文的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • C语言实现三子棋简单小游戏

    C语言实现三子棋简单小游戏

    这篇文章主要为大家详细介绍了C语言实现三子棋简单小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C 语言二叉树几种遍历方法详解及实例

    C 语言二叉树几种遍历方法详解及实例

    这篇文章主要介绍了C 语言二叉树几种遍历方法详解及实例的相关资料,二叉树在数据结构当中是非常重要的知识要点,这里对二叉树进行了总结,需要的朋友可以参考下
    2017-01-01
  • C语言不定长数组及初始化方法

    C语言不定长数组及初始化方法

    今天小编就为大家分享一篇C语言不定长数组及初始化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • C语言中判断素数(求素数)的思路与方法实例

    C语言中判断素数(求素数)的思路与方法实例

    计算机或者相关专业基本上大一新生开始学编程都会接触的一个问题就是判断质数,下面这篇文章主要给大家介绍了关于C语言中判断素数(求素数)的思路与方法,需要的朋友可以参考下
    2022-03-03
  • C++ 中重载和运算符重载加号实现矩阵相加实例代码

    C++ 中重载和运算符重载加号实现矩阵相加实例代码

    这篇文章主要介绍了C++ 中重载和运算符重载加号实现矩阵相加实例代码的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论