如何在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
相关产品推荐
相关产品推荐

