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

NodeJS调用OpenHardwareMonitorLib.dll获取远程CPU/GPU温度求助

在Node.js项目中调用OpenHardwareMonitorLib.dll获取硬件温度

前置准备

  • 下载OpenHardwareMonitor工具,解压后找到OpenHardwareMonitorLib.dll文件,复制到你的Node.js项目根目录。
  • 安装Node.js的DLL调用依赖包(ffi-napi是ffi的维护版,适配新版Node.js),执行命令:
    npm install ffi-napi ref-napi
    

具体实现步骤

  1. 编写调用代码
    在项目中创建hardwareTemp.js文件,写入以下代码:

    const ffi = require('ffi-napi');
    const ref = require('ref-napi');
    
    // 定义DLL所需的类型映射
    const SensorType = ref.types.int;
    const HardwareType = ref.types.int;
    const ISensor = ref.refType(ref.types.void);
    const IHardware = ref.refType(ref.types.void);
    const IComputer = ref.refType(ref.types.void);
    
    // 加载并映射DLL中的函数
    const ohmLib = ffi.Library('./OpenHardwareMonitorLib', {
      'Computer_Create': ['pointer', []],
      'Computer_Open': ['void', [IComputer]],
      'Computer_GetHardwareCount': ['int', [IComputer]],
      'Computer_Hardware': ['pointer', [IComputer, ref.types.int]],
      'Hardware_Name': ['string', [IHardware]],
      'Hardware_Sensors': ['pointer', [IHardware, ref.types.int]],
      'Sensor_Type': [SensorType, [ISensor]],
      'Sensor_Name': ['string', [ISensor]],
      'Sensor_Value': ['double', [ISensor]],
      'Computer_Close': ['void', [IComputer]]
    });
    
    // 定义温度传感器的类型常量(对应OpenHardwareMonitor的枚举值)
    const SENSOR_TEMPERATURE = 0;
    
    // 封装获取温度的函数
    function getHardwareTemperatures() {
      const computer = ohmLib.Computer_Create();
      ohmLib.Computer_Open(computer);
      const hardwareCount = ohmLib.Computer_GetHardwareCount(computer);
      const tempData = [];
    
      // 遍历所有硬件设备
      for (let i = 0; i < hardwareCount; i++) {
        const hardware = ohmLib.Computer_Hardware(computer, i);
        const hardwareName = ohmLib.Hardware_Name(hardware);
    
        // 遍历当前硬件的所有传感器
        let sensorIdx = 0;
        while (true) {
          const sensor = ohmLib.Hardware_Sensors(hardware, sensorIdx);
          if (sensor.isNull()) break;
    
          // 筛选温度类型的传感器
          if (ohmLib.Sensor_Type(sensor) === SENSOR_TEMPERATURE) {
            tempData.push({
              hardware: hardwareName,
              sensor: ohmLib.Sensor_Name(sensor),
              temperature: `${ohmLib.Sensor_Value(sensor).toFixed(1)}°C`
            });
          }
          sensorIdx++;
        }
      }
    
      ohmLib.Computer_Close(computer);
      return tempData;
    }
    
    // 测试调用
    const temperatures = getHardwareTemperatures();
    console.log('硬件温度数据:', temperatures);
    
  2. 运行注意事项

    • 确保DLL版本和系统位数匹配:64位系统用64位OpenHardwareMonitorLib.dll,32位系统用对应32位版本,否则会加载失败。
    • 必须以管理员权限运行Node.js程序,读取硬件温度需要系统权限。
    • 建议使用Node.js LTS版本(如16.x、18.x),避免依赖包兼容性问题。

远程SSH获取补充

如果要通过SSH远程获取温度,推荐在远程Windows机器上部署这个Node.js脚本,通过SSH执行脚本并返回结果;或者启用OpenHardwareMonitor的HTTP服务,直接通过HTTP接口获取数据,这种方式比远程调用DLL更简便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:27:15