所以我一直在尝试获取 Windows、msvc 上的 CPU 温度,最后我找到了 Libre Hardware Monitor,Open Hardware Monitor 的分支。
还有人(获取CPU温度)说他使用了lhwm-wrapper(https://gitlab.com/OpenRGBDevelopers/lhwm-wrapper)所以它可以与c++一起使用。
这个 lhwm-wrapper 导出了三个函数:
GetHardwareSensorMap()
//returns a map
GetSensorValue(std::string identifier)
//returns float
SetControlValue(std::string identifier, float value)
//void function
所以我一直好奇如何使用这个功能来获取CPU热量,我想我应该使用
GetSensorValue(std::string identifier)
来访问,但是我不知道该输入什么。也许CPU的热传感器的值我完全不知道。
我创建了一个可以使用 lhwm-wrapper 的 Visual Studio 项目,并尝试为
GetSensorValue(std::string identifier)
提供一些值
像这样:
#include <iostream>
#include <lhwm-cpp-wrapper.h>
int main()
{
std::cout << LHWM::GetSensorValue("0");
}
无论我输入什么,输出都是 0。
您需要的所有信息都可以在映射中找到,在 C++ 中,这是一个元组映射,每个元组包含三个数据点:
每个硬件都有各种类型的传感器,每个传感器都有各自的值。对于您的情况,您想要找到类型为
Temperature
的传感器。
您可以通过提供的
LHWM::GetHardwareSensorMap()
找到所有这些信息。
例如。我找到了我的 CPU
AMD Ryzen 7 PRO 4750U with Radeon Graphics
,在许多元组中我发现了一个类型为 Temperature
且 ID 为 /amdcpu/0/temperature/2
的传感器。
所以,我按如下方式插入。
std::string sensorId = "/amdcpu/0/temperature/2";
float temp = LHWM::GetSensorValue(sensorId);
std::cout << "Temperature: " << temp << std::endl;
这给了我以摄氏度为单位的值
57.625
。
注意:程序必须以提升权限运行,否则你会得到0读数。这就是发生在我身上并导致 最初有些混乱。