使用C++语言获取CPU与硬盘温度
时间: 2024-06-11 09:05:33 浏览: 229
获取CPU和硬盘的温度
4星 · 用户满意度95%
获取CPU温度需要调用操作系统提供的API,因此不同操作系统获取方式可能不同。以下是在Windows操作系统下获取CPU温度的示例代码:
```c
#include <Windows.h>
#include <stdio.h>
int main()
{
// 获取CPU温度
DWORD temperature = 0;
DWORD bufferSize = sizeof(temperature);
if (RegGetValueA(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", "~\\Thermal Zone Temperature", RRF_RT_DWORD, NULL, &temperature, &bufferSize) == ERROR_SUCCESS)
{
float temp = temperature * 0.01 - 273.15; // 将温度值转换为摄氏度
printf("CPU temperature: %.2f ℃\n", temp);
}
else
{
printf("Failed to get CPU temperature.\n");
}
// 获取硬盘温度
// TODO: 暂未实现
return 0;
}
```
以上代码通过调用`RegGetValueA`函数从注册表中读取CPU温度值,然后将其转换为摄氏度并输出。需要注意的是,不同CPU型号的温度传感器可能有不同的标定值,因此将读取到的数值乘以0.01再减去273.15才能得到正确的温度值。
获取硬盘温度也需要调用操作系统提供的API,以下是在Windows操作系统下获取硬盘温度的示例代码:
```c
#include <Windows.h>
#include <stdio.h>
int main()
{
// 获取CPU温度
DWORD cpuTemp = 0;
DWORD bufferSize = sizeof(cpuTemp);
if (RegGetValueA(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", "~\\Thermal Zone Temperature", RRF_RT_DWORD, NULL, &cpuTemp, &bufferSize) == ERROR_SUCCESS)
{
float temp = cpuTemp * 0.01 - 273.15; // 将温度值转换为摄氏度
printf("CPU temperature: %.2f ℃\n", temp);
}
else
{
printf("Failed to get CPU temperature.\n");
}
// 获取硬盘温度
DWORD driveTemp = 0;
HANDLE driveHandle = CreateFileA("\\\\.\\PhysicalDrive0", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (driveHandle != INVALID_HANDLE_VALUE)
{
if (DeviceIoControl(driveHandle, 0x0C, NULL, 0, &driveTemp, sizeof(driveTemp), NULL, NULL))
{
float temp = driveTemp - 273.15; // 将温度值转换为摄氏度
printf("Drive temperature: %.2f ℃\n", temp);
}
else
{
printf("Failed to get drive temperature.\n");
}
CloseHandle(driveHandle);
}
else
{
printf("Failed to open drive.\n");
}
return 0;
}
```
以上代码通过调用`CreateFileA`函数打开物理硬盘的句柄,然后调用`DeviceIoControl`函数获取硬盘温度值。需要注意的是,不同硬盘型号的温度传感器可能有不同的标定值,因此需要根据具体硬盘型号进行转换。
阅读全文