Node.js 机器已锁定/解锁时的事件(电子窗口)
因此,我有一些任务需要在用户锁定机器时通知我。这是为了暂停这些任务。同样,我需要知道机器何时成功解锁,以便恢复上述任务。这纯粹是针对Windows的功能,因此不需要跨平台 我查看了电子文档,发现了关于Node.js 机器已锁定/解锁时的事件(电子窗口),node.js,windows,electron,Node.js,Windows,Electron,因此,我有一些任务需要在用户锁定机器时通知我。这是为了暂停这些任务。同样,我需要知道机器何时成功解锁,以便恢复上述任务。这纯粹是针对Windows的功能,因此不需要跨平台 我查看了电子文档,发现了关于powerMonitorAPI的内容,但是它只有suspend和resume的事件。我假设他们将要睡眠的机器称为锁定,解除锁定不会在我的机器上触发它们(Win 10) 我对核心Windows及其消息/事件系统的工作原理知之甚少。然而,我找到了关于WM\uwtssession\uchange的列表信息
powerMonitor
API的内容,但是它只有suspend
和resume
的事件。我假设他们将要睡眠的机器称为锁定,解除锁定不会在我的机器上触发它们(Win 10)
我对核心Windows及其消息/事件系统的工作原理知之甚少。然而,我找到了关于WM\uwtssession\uchange
的列表信息,这似乎是我所需要的。特别是WTS\u会话锁定(0x7)
和WTS\u会话解锁(0x8)
状态代码
然而,我找不到一种直接使用electron或NodeJS来收听Windows消息的方法
对这个问题的任何建议都将不胜感激。谢谢您可以使用“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 );
}
} );
}
if(process.platform=='win32'| | process.platform=='win64'){
var edge=require('electron edge js');
var checkLockStatus=edge.func(函数(){/*
使用制度;
使用System.Threading.Tasks;
使用Microsoft.Win32;
使用System.Collections.Generic;
公共类启动:IDisposable
{
私有函数callbackFn;
公共异步任务调用(IDictionary输入)
{
callbackFn=(Func)输入[“callbackFn”];
SystemEvents.SessionSwitch+=SystemEvents\u SessionSwitch;
返回null;
}
public async void SystemEvents\u SessionSwitch(对象发送方,SessionSwitchEventArgs e)
{
if(e.Reason==SessionSwitchReason.SessionLock)
{
callbackFn(“锁定”);
}
else if(e.Reason==SessionSwitchReason.SessionUnlock)
{
callbackFn(“解锁”);
}
}
公共空间处置()
{
SystemEvents.SessionSwitch-=SystemEvents\u SessionSwitch;
}
}
*/} );
检查锁状态({
callbackFn:函数(状态){
console.log(状态);
}
} );
}
为了防止有人最终遇到这个老问题,现在支持两个事件:锁定屏幕
和解锁屏幕
,因此您可以(在主流程中):
有解决办法吗?恐怕没有。不,我不久前就因为这个把它记下来了。
const {powerMonitor} = require("electron");
powerMonitor.addListener('lock-screen', () => {
// Screen is locked, do something
});
powerMonitor.addListener('unlock-screen', () => {
// Screen is unlocked, do something else
});