使用WinRing0获取CPU温度和风扇转速的C++代码示例

本示例演示如何使用WinRing0库获取CPU温度和风扇转速。

代码:

#include <iostream>
#include <Windows.h>
#include 'WinRing0/OlsApiInit.h'
#include 'WinRing0/OlsDef.h'

int main()
{
    // 初始化WinRing0
    if (!OlsInit())
    {
        std::cout << 'Failed to initialize WinRing0.' << std::endl;
        return 1;
    }

    // 获取CPU温度和风扇转速
    DWORD dwNumberOfProcessors = 0;
    if (!OlsGetNumberOfProcessors(&dwNumberOfProcessors))
    {
        std::cout << 'Failed to get number of processors.' << std::endl;
        return 1;
    }

    for (DWORD i = 0; i < dwNumberOfProcessors; i++)
    {
        DWORD dwTemperature = 0;
        DWORD dwFanSpeed = 0;

        if (OlsReadIoPortByte(i, 0x2E, &dwTemperature) && OlsReadIoPortByte(i, 0x2F, &dwFanSpeed))
        {
            std::cout << 'CPU ' << i << ' Temperature: ' << dwTemperature << '°C' << std::endl;
            std::cout << 'CPU ' << i << ' Fan Speed: ' << dwFanSpeed << ' RPM' << std::endl;
        }
        else
        {
            std::cout << 'Failed to read CPU ' << i << ' temperature and fan speed.' << std::endl;
        }
    }

    // 清理WinRing0
    OlsCleanup();

    return 0;
}

代码解释:

  1. 包含头文件:

    • iostream: 用于输入输出流操作。
    • Windows.h: 提供访问Windows API的功能。
    • WinRing0/OlsApiInit.hWinRing0/OlsDef.h: 包含WinRing0库的函数和定义。
  2. 初始化WinRing0:

    • OlsInit(): 初始化WinRing0库。
  3. 获取CPU数量:

    • OlsGetNumberOfProcessors(): 获取系统中CPU的数量。
  4. 循环读取每个CPU的数据:

    • OlsReadIoPortByte(): 从指定的IO端口读取一个字节的数据。
      • 第一个参数是CPU索引。
      • 第二个参数是IO端口地址。
      • 第三个参数是指向存储读取数据的变量的指针。
    • 代码使用 0x2E0x2F 端口分别读取CPU温度和风扇转速。
  5. 输出结果:

    • 打印每个CPU的温度和风扇转速。
  6. 清理WinRing0:

    • OlsCleanup(): 清理WinRing0库。

使用WinRing0库:

  1. 下载WinRing0库文件。
  2. 将头文件 (OlsApiInit.h, OlsDef.h) 和库文件添加到您的项目中。
  3. 在编译时链接WinRing0库。

注意: 使用WinRing0库需要管理员权限,因为它需要访问底层硬件资源。

使用WinRing0获取CPU温度和风扇转速的C++代码示例

原文地址: https://www.cveoy.top/t/topic/fvSz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录