OpenHardwareMonitor仅显示负载传感器,无法获取CPU温度与电压求助
问题:C#调用OpenHardwareMonitor无法获取CPU温度与电压传感器数据
我尝试用C#代码调用OpenHardwareMonitor获取所有传感器数据,但目前只能拿到CPU各核心及总负载类型的传感器,无法获取CPU温度和电压传感器。OpenHardwareMonitor官方应用可以正常查看全部传感器,我试过多种教程,也遍历了子硬件,但都没效果。
我的代码
{ Computer myComputer = new Computer(); myComputer = new Computer() { CPUEnabled = true }; myComputer.Open(); Trace.WriteLine(""); foreach (var hardwareItem in myComputer.Hardware) { if (hardwareItem.HardwareType == HardwareType.CPU) { hardwareItem.Update(); foreach (IHardware subHardware in hardwareItem.SubHardware) subHardware.Update(); foreach (var sensor in hardwareItem.Sensors) { Debug.WriteLine(sensor.Name + " " + sensor.SensorType + " " + sensor.SensorType); } } } }
当前输出结果
CPU Core #1 Load Load CPU Core #2 Load Load CPU Core #3 Load Load CPU Core #4 Load Load CPU Core #5 Load Load CPU Core #6 Load Load CPU Core #7 Load Load CPU Core #8 Load Load CPU Core #9 Load Load CPU Core #10 Load Load CPU Core #11 Load Load CPU Core #12 Load Load CPU Core #13 Load Load CPU Core #14 Load Load CPU Core #15 Load Load CPU Core #16 Load Load CPU Total Load Load
解决方法
1. 启用必要的硬件监控权限
OpenHardwareMonitor需要显式启用对应硬件的监控开关,仅开启CPUEnabled不足以获取温度、电压数据——这类传感器常依赖主板监控模块。修改Computer初始化代码:
Computer myComputer = new Computer() { CPUEnabled = true, MotherboardEnabled = true, // 启用主板监控,多数CPU温度传感器挂载于此 SensorsEnabled = true // 显式启用传感器集合 };
2. 遍历所有硬件及子硬件的传感器
部分CPU的温度、电压传感器不会直接归类到HardwareType.CPU下,而是属于主板子硬件或其他关联组件。调整遍历逻辑,不要仅过滤CPU硬件:
myComputer.Open(); foreach (var hardwareItem in myComputer.Hardware) { hardwareItem.Update(); // 更新并遍历子硬件的传感器 foreach (var subHardware in hardwareItem.SubHardware) { subHardware.Update(); foreach (var sensor in subHardware.Sensors) { if (sensor.SensorType is SensorType.Temperature or SensorType.Voltage) { Debug.WriteLine($"{sensor.Name} | {sensor.SensorType} | 数值: {sensor.Value?.ToString("F2")}"); } } } // 遍历当前硬件的传感器 foreach (var sensor in hardwareItem.Sensors) { if (sensor.SensorType is SensorType.Temperature or SensorType.Voltage) { Debug.WriteLine($"{sensor.Name} | {sensor.SensorType} | 数值: {sensor.Value?.ToString("F2")}"); } } }
3. 以管理员权限运行程序
读取硬件传感器需要系统管理员权限,普通权限会限制底层硬件访问。可以:
- 右键程序选择「以管理员身份运行」
- 在项目的
app.manifest中修改权限配置:<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
4. 核对版本与驱动
- 确保引用的OpenHardwareMonitor库版本和官方应用一致,避免版本兼容问题
- 检查并更新CPU、主板芯片组的官方驱动,缺失驱动会导致传感器无法被识别
内容的提问来源于stack exchange,提问作者Michael Canseco
相关产品推荐
相关产品推荐

