我有一个小型 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);
注册成功,但仍需要一些工作。想知道是否有人可以帮忙?
SvcMain函数首先调用RegisterServiceCtrlHandler(或RegisterServiceCtrlHandlerEx) 函数将 SvcCtrlHandler 函数注册为服务的 处理函数并开始初始化。
然后你可以打电话
RegisterPowerSettingNotification(hRecipient,GUID_SYSTEM_AWAYMODE,DEVICE_NOTIFY_SERVICE_HANDLE)
对于服务,
参数应为1,Flags
参数应该是从返回的hRecipient
注册ServiceCtrlHandlerEx。SERVICE_STATUS_HANDLE