前车之鉴,上次兴高采烈的写完了调用OpenHardwareMonitorLib.dll的程序,结果发现CPU比较高端,根本读不出温度信息。其他的信息倒是能读出来一些。写之前完全没有思考过由于版本更迭而出现错误的情况,引以为戒。
经过多方查证,发现OpenHardwareMonitor有一个分支LibreHardwareMonitor,项目在GitHub上是开源的(https://github.com/LibreHardwareMonitor/LibreHardwareMonitor),并且一直有人在更新维护。
由于我实在是过于小白,甚至不知道该如何使用这个项目(大哭)。最后借鉴了CSDN上的一篇文章(https://blog.csdn.net/nbt_silent1/article/details/130555272),解惑了调用和参数的问题,感谢。
本程序由ChatGPT-4o全程参与辅助编写。
本程序调用的LibreHardwareMonitorLib.dll是从由GitHub上下载的LibreHardwareMonitor软件内提取的:

LibreHardwareMonitor程序文件
源码如下:
import clr # 导入扩展模块
import os # 导入操作系统模块
# 获取当前脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 构建LibreHardwareMonitorLib.dll的完整路径
dll_path = os.path.join(script_dir, 'LibreHardwareMonitorLib.dll')
# 将LibreHardwareMonitorLib.dll添加到CLR的引用中
clr.AddReference(dll_path)
# 从LibreHardwareMonitor模块中导入Hardware类
from LibreHardwareMonitor import Hardware
# 创建一个Hardware.Computer的实例对象
computer_tmp = Hardware.Computer()
computer_tmp.IsCpuEnabled = True # 获取CPU
computer_tmp.IsGpuEnabled = True # 获取GPU
# computer_tmp.IsMemoryEnabled = True # 获取内存
# computer_tmp.IsNetworkEnabled = True # 获取网卡数据
# computer_tmp.IsMotherboardEnabled = True # 获取主板
# computer_tmp.IsControllerEnabled = True #控制器,不知道是啥
# computer_tmp.IsStorageEnabled = True # 获取硬盘
# 打开硬件监视器
computer_tmp.Open()
# 设置要获取的CPU和GPU温度数量
num_cpu_temps = 5 # 例如设置为4
num_gpu_temps = 1 # 例如设置为1
# 声明空数组,用于存储温度数据
cpu_temperatures = []
gpu_temperatures = []
# 遍历所有硬件对象
for hardware in computer_tmp.Hardware:
# 将硬件类型转换为字符串
hardware_type = str(hardware.HardwareType)
# 如果硬件类型包含CPU并且CPU温度数据未达到预设数量
if 'CPU' in hardware_type.upper() and len(cpu_temperatures) < num_cpu_temps:
# 更新硬件数据
hardware.Update()
# 遍历硬件的传感器
for sensor in hardware.Sensors:
# 如果传感器类型是温度
if sensor.SensorType == Hardware.SensorType.Temperature:
# 输出本次获取到的CPU温度
# print(sensor.Name, "温度:", sensor.Value)
# 将CPU温度值添加到数组中
cpu_temperatures.append(sensor.Value)
# 如果已达到预设的CPU温度数量,停止获取更多数据
if len(cpu_temperatures) == num_cpu_temps:
break
# 如果硬件类型包含GPU并且GPU温度数据未达到预设数量
elif 'GPU' in hardware_type.upper() and len(gpu_temperatures) < num_gpu_temps:
# 更新硬件数据
hardware.Update()
# 遍历硬件的传感器
for sensor in hardware.Sensors:
# 如果传感器类型是温度
if sensor.SensorType == Hardware.SensorType.Temperature:
# 输出本次获取到的GPU温度
# print(sensor.Name, "温度:", sensor.Value)
# 将GPU温度值添加到数组中
gpu_temperatures.append(sensor.Value)
# 如果已达到预设的GPU温度数量,停止获取更多数据
if len(gpu_temperatures) == num_gpu_temps:
break
break
if cpu_temperatures:
max_cpu_temp = max(cpu_temperatures)
print("CPU最高温度:", max_cpu_temp)
else:
print("未获取到CPU温度信息")
if gpu_temperatures:
max_gpu_temp = max(gpu_temperatures)
print("GPU最高温度:", max_gpu_temp)
else:
print("未获取到GPU温度信息")
每一行都让ChatGPT加上了注释,再也不用自己动手写注释了。
应将LibreHardwareMonitorLib.dll文件放于程序文件同目录。
前面的语句不做介绍。【需要获取的CPU和GPU温度数量】的两个需要设置的变量是个笨办法,因为现在获取到的CPU温度数据是这样的:

LibreHardwareMonitor软件截图
这个办公电脑的CPU是4核的,我只需要前面4个温度,最多再加上第五个的封装温度,其余温度不知道是干啥的,不做采集。不方便给名称做字符匹配,干脆就使用数量匹配了。
后面的程序注释写的非常明白,不再叙述。
上述程序运行结果:

上述程序运行结果
记录自己的成长。