如何在 Node.js 中检测 Windows 睡眠?

问题描述 投票:0回答:1

我有一个小型 Node.js 应用程序,它作为 NSSM 的服务运行。我需要捕捉 Windows 是否要休眠并运行一个小的快速代码。

电子中有一些 powerMonitor,但我不想为此包含整个电子。

所以我正在考虑其他选项,发现可以使用 ffi-napi 使用 RegisterPowerSettingNotification 来实现此目的。

我正在尝试这段代码,但无法让它工作,我认为需要添加要调用的回调。

const ffi = require('ffi-napi');
const ref = require('ref-napi');

const user32 = ffi.Library('user32', {
  'RegisterPowerSettingNotification': ['pointer', ['pointer', 'pointer', 'int']]
});

const GUID_SYSTEM_AWAYMODE = ref.allocCString('{98a7f580-01f7-48aa-9c0f-44352c29e5C0}');
const DEVICE_NOTIFY_WINDOW_HANDLE = 0x00000000;

const callback = ffi.Callback('void', ['pointer', 'pointer'], (hRecipient, pPowerSetting) => {
  console.log('System is going to sleep');
});

const result = user32.RegisterPowerSettingNotification(null, GUID_SYSTEM_AWAYMODE, DEVICE_NOTIFY_WINDOW_HANDLE);
if (!result) {
  console.error('Failed to register for power setting notifications');
} else {
  console.log('Successfully registered for power setting notifications');
}

setInterval(() => {}, 1000);

注册成功,但仍需要一些工作。想知道是否有人可以帮忙?

node.js winapi
1个回答
0
投票

编写 ServiceMain 函数所示,

SvcMain函数首先调用RegisterServiceCtrlHandler(或RegisterServiceCtrlHandlerEx) 函数将 SvcCtrlHandler 函数注册为服务的 处理函数并开始初始化。

然后你可以打电话

RegisterPowerSettingNotification(hRecipient,GUID_SYSTEM_AWAYMODE,DEVICE_NOTIFY_SERVICE_HANDLE)

对于服务,

Flags
参数应为1,
hRecipient
参数应该是从返回的
SERVICE_STATUS_HANDLE
注册ServiceCtrlHandlerEx

© www.soinside.com 2019 - 2024. All rights reserved.