windows用c++获取cpu温度
时间: 2023-07-27 20:06:21 浏览: 450
用驱动获取cpu的温度
4星 · 用户满意度95%
要在 Windows 平台上使用 C++ 获取 CPU 温度,你可以使用 Windows API,具体步骤如下:
1. 引入头文件
```
#include <Windows.h>
#include <Winioctl.h>
```
2. 定义 IOCTL 值
```
#define IOCTL_TEMPERATURE_READ \
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
```
3. 打开 CPU 温度设备
```
HANDLE hDevice = CreateFile(L"\\\\.\\ThermalZoneTemperature",
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
// 处理打开设备失败的情况
}
```
4. 发送 IOCTL 命令获取温度数据
```
DWORD dwSize = 0;
float fTemperature = 0;
if (!DeviceIoControl(hDevice, IOCTL_TEMPERATURE_READ, NULL, 0, &fTemperature,
sizeof(fTemperature), &dwSize, NULL)) {
// 处理获取温度失败的情况
}
```
5. 关闭设备句柄
```
CloseHandle(hDevice);
```
完整代码如下:
```c++
#include <Windows.h>
#include <Winioctl.h>
#include <iostream>
#define IOCTL_TEMPERATURE_READ \
CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
int main() {
HANDLE hDevice = CreateFile(L"\\\\.\\ThermalZoneTemperature",
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
std::cout << "Failed to open device." << std::endl;
return 1;
}
DWORD dwSize = 0;
float fTemperature = 0;
if (!DeviceIoControl(hDevice, IOCTL_TEMPERATURE_READ, NULL, 0, &fTemperature,
sizeof(fTemperature), &dwSize, NULL)) {
std::cout << "Failed to get temperature." << std::endl;
CloseHandle(hDevice);
return 1;
}
std::cout << "CPU temperature: " << fTemperature << " degrees Celsius." << std::endl;
CloseHandle(hDevice);
return 0;
}
```
需要注意的是,这种方式获取 CPU 温度可能不适用于所有的 CPU 和操作系统版本,而且在一些情况下可能需要管理员权限才能够执行。
阅读全文