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
具体实现步骤
编写调用代码
在项目中创建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);运行注意事项
- 确保DLL版本和系统位数匹配:64位系统用64位
OpenHardwareMonitorLib.dll,32位系统用对应32位版本,否则会加载失败。 - 必须以管理员权限运行Node.js程序,读取硬件温度需要系统权限。
- 建议使用Node.js LTS版本(如16.x、18.x),避免依赖包兼容性问题。
- 确保DLL版本和系统位数匹配:64位系统用64位
远程SSH获取补充
如果要通过SSH远程获取温度,推荐在远程Windows机器上部署这个Node.js脚本,通过SSH执行脚本并返回结果;或者启用OpenHardwareMonitor的HTTP服务,直接通过HTTP接口获取数据,这种方式比远程调用DLL更简便。
内容的提问来源于stack exchange,提问作者Didem
相关产品推荐
相关产品推荐

