机器锁定/解锁时的事件(Electron Windows)

时间:2017-05-12 07:11:02

标签: node.js windows electron

所以我有一些任务需要在用户锁定他们的机器时得到通知。这是为了暂停这些任务。同样,我需要知道机器何时成功解锁才能恢复所述任务。这纯粹是针对仅限Windows的功能,因此不需要跨平台。

我查看了Electron文档并找到了关于powerMonitor API的this,但它只包含suspendresume的事件。我假设它们是指机器进入睡眠状态,因为锁定和解锁不会在我的机器上触发它们(Win 10)。

我很少了解核心Windows的工作原理及其消息/事件系统。但是我发现this列出了WM_WTSSESSION_CHANGE的信息,这似乎是我需要的。值得注意的是WTS_SESSION_LOCK (0x7)WTS_SESSION_UNLOCK (0x8)状态代码。

但是我无法通过电子或NodeJS直接收听Windows消息。

对此问题的任何建议将不胜感激。感谢

2 个答案:

答案 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-screenunlock-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
});