所以我有一些任务需要在用户锁定他们的机器时得到通知。这是为了暂停这些任务。同样,我需要知道机器何时成功解锁才能恢复所述任务。这纯粹是针对仅限Windows的功能,因此不需要跨平台。
我查看了Electron文档并找到了关于powerMonitor
API的this,但它只包含suspend
和resume
的事件。我假设它们是指机器进入睡眠状态,因为锁定和解锁不会在我的机器上触发它们(Win 10)。
我很少了解核心Windows的工作原理及其消息/事件系统。但是我发现this列出了WM_WTSSESSION_CHANGE
的信息,这似乎是我需要的。值得注意的是WTS_SESSION_LOCK (0x7)
和WTS_SESSION_UNLOCK (0x8)
状态代码。
但是我无法通过电子或NodeJS直接收听Windows消息。
对此问题的任何建议将不胜感激。感谢
答案 0 :(得分:1)
您可以使用'electron-edge-js'
这是解决方案:
if( process.platform == 'win32' || process.platform == 'win64' ) {
var edge = require( 'electron-edge-js' );
var checkLockStatus = edge.func( function() {/*
using System;
using System.Threading.Tasks;
using Microsoft.Win32;
using System.Collections.Generic;
public class Startup : IDisposable
{
private Func<object, Task<object>> callbackFn;
public async Task<object> Invoke(IDictionary<string, object> input)
{
callbackFn = (Func<object, Task<object>>)input["callbackFn"];
SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
return null;
}
public async void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLock)
{
callbackFn( "locked" );
}
else if (e.Reason == SessionSwitchReason.SessionUnlock)
{
callbackFn( "unlocked" );
}
}
public void Dispose()
{
SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch;
}
}
*/} );
checkLockStatus( {
callbackFn: function( state ) {
console.log( state );
}
} );
}
答案 1 :(得分:1)
以防万一,有人最终解决了这个老问题,powerMonitor现在为此支持两个事件:lock-screen
和unlock-screen
,因此您可以(在主要过程中): / p>
const {powerMonitor} = require("electron");
powerMonitor.addListener('lock-screen', () => {
// Screen is locked, do something
});
powerMonitor.addListener('unlock-screen', () => {
// Screen is unlocked, do something else
});