You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust 1.75.0中获取Windows 10 20H2的CPU温度并定时记录?

解决方案

依赖准备

在项目的Cargo.toml中添加以下依赖:

[dependencies]
wmi = "0.12"
chrono = "0.4"
  • wmi:用于访问Windows管理规范(WMI),查询硬件传感器数据
  • chrono:用于生成日志时间戳,让输出更清晰

完整实现代码

use chrono::Local;
use std::thread;
use std::time::Duration;
use wmi::COMLibrary;

fn get_cpu_temperature() -> Result<f32, Box<dyn std::error::Error>> {
    // 初始化COM库,WMI依赖COM环境
    let com_con = COMLibrary::new()?;
    let wmi_con = com_con.connect_to_local()?;

    // 查询WMI中的温度传感器,筛选CPU相关条目
    // 不同硬件的传感器名称可能有差异,可根据实际情况调整WHERE条件
    let query = "SELECT CurrentReading, Name FROM Win32_TemperatureProbe WHERE Name LIKE '%CPU%' OR Name LIKE '%Processor%'";
    let results: Vec<wmi::DynamicInstance> = wmi_con.raw_query(query)?;

    if results.is_empty() {
        return Err("未找到CPU温度传感器".into());
    }

    // 提取温度数据:CurrentReading单位为十分之一摄氏度,转换为标准摄氏度
    let temp_instance = &results[0];
    let current_reading: i32 = temp_instance.get("CurrentReading")?;
    let temp_celsius = current_reading as f32 / 10.0;

    Ok(temp_celsius)
}

fn main() {
    println!("CPU温度监控程序启动,每隔5分钟输出一次数据...");
    println!("------------------------------------------");

    loop {
        let now = Local::now().format("%Y-%m-%d %H:%M:%S").to_string();
        match get_cpu_temperature() {
            Ok(temp) => println!("[{}] CPU温度: {:.1} °C", now, temp),
            Err(e) => println!("[{}] 获取CPU温度失败: {}", now, e),
        }

        // 休眠5分钟(300秒)
        thread::sleep(Duration::from_secs(300));
    }
}

注意事项

  • 权限要求:程序需要以管理员权限运行,否则可能无法访问WMI的硬件传感器数据
  • 传感器名称适配:不同品牌的CPU或主板,传感器名称可能不同,如果未找到数据,可去掉查询语句中的WHERE条件,查看所有传感器名称后再调整筛选规则
  • 环境兼容:代码基于Rust 1.75.0编写,适配Windows 10 20H2系统,老旧硬件可能未暴露温度传感器数据
  • 错误处理:代码包含基础错误捕获,可根据需求扩展异常处理逻辑

内容的提问来源于stack exchange,提问作者Just_Another_Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:04:55