使用WinRing0获取CPU温度和风扇转速的C++代码示例
使用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;
}
代码解释:
-
包含头文件:
iostream: 用于输入输出流操作。Windows.h: 提供访问Windows API的功能。WinRing0/OlsApiInit.h和WinRing0/OlsDef.h: 包含WinRing0库的函数和定义。
-
初始化WinRing0:
OlsInit(): 初始化WinRing0库。
-
获取CPU数量:
OlsGetNumberOfProcessors(): 获取系统中CPU的数量。
-
循环读取每个CPU的数据:
OlsReadIoPortByte(): 从指定的IO端口读取一个字节的数据。- 第一个参数是CPU索引。
- 第二个参数是IO端口地址。
- 第三个参数是指向存储读取数据的变量的指针。
- 代码使用
0x2E和0x2F端口分别读取CPU温度和风扇转速。
-
输出结果:
- 打印每个CPU的温度和风扇转速。
-
清理WinRing0:
OlsCleanup(): 清理WinRing0库。
使用WinRing0库:
- 下载WinRing0库文件。
- 将头文件 (
OlsApiInit.h,OlsDef.h) 和库文件添加到您的项目中。 - 在编译时链接WinRing0库。
注意: 使用WinRing0库需要管理员权限,因为它需要访问底层硬件资源。
原文地址: https://www.cveoy.top/t/topic/fvSz 著作权归作者所有。请勿转载和采集!