javascript - 如何在 Electron 应用程序中检测系统空闲并执行某些操作
问题描述
我开发了应用程序,如果用户在 30 分钟内什么都不做,我想制作它关闭应用程序。
所以我在谷歌上搜索它来解决这个问题,我发现电子中有'powerMonitor' API,但问题是我的应用程序是旧版本(电子 3.1.14)所以它不支持各种方法。
我想我应该使用powerMonitor.querySystemIdleTime()
方法,我尝试测试“pwoerMonitor”API,所以我粘贴了代码,但是
console.log(powerMonitor.querySystemIdleTime())
它返回此错误消息。
如何检测系统空闲并在电子中执行某些操作?我应该使用另一个包吗?
import { app, dialog, Menu, Notification, Tray, ipcMain, powerMonitor } from 'electron'
import windowManager from 'electron-window-manager'
import schedule from 'node-schedule'
let mainWindow = null
let tray = null
if (process.env.NODE_ENV !== 'development') {
global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
}
app.setAppUserModelId('Geomec Cloud Manager')
windowManager.init({
appBase: process.env.NODE_ENV === 'production'
? `file://${__dirname}`
: 'http://localhost:9080'
})
if (isSecondInstance) {
app.quit()
} else {
app.on('second-instance', () => {
if (mainWindow) {
mainWindow.object.show()
mainWindow.object.focus()
}
})
/* Main Window */
app.on('ready', () => {
mainWindow = windowManager.createNew('main-window', '', '/index.html', null, {
title: 'Geomec Cloud Manager',
height: 500,
width: 500,
useContentSize: true,
frame: false,
maximizable: false,
minimizable: false,
resizable: false
}).create()
console.log(powerMonitor.querySystemIdleTime()) // I thought it returns idle time
if (!process.argv.includes('--systray')) {
mainWindow.object.once('ready-to-show', () => {
mainWindow.object.show()
})
}
tray = new Tray(__static + '/tray-icon.ico')
const trayMenu = Menu.buildFromTemplate([{
label: '프로그램 정보',
click () {
const window = windowManager.createNew('about-window', '', '/index.html#about', null, {
height: 380,
width: 550,
useContentSize: true,
frame: false,
maximizable: false,
minimizable: false,
resizable: false,
modal: true,
parent: windowManager.get('main-window').object
}).create()
window.object.once('ready-to-show', () => {
window.object.show()
})
}
},
{
/* Tray 내부 프로그램 종료 함수 */
label: '프로그램 종료',
click () {
const notification = {
icon: __static + '/' + 'app-icon.png',
title: '네트워크 드라이브 연결이 해제되었습니다',
body: '프로그램을 종료합니다'
}
new Notification(notification).show()
mainWindow.object.webContents.send('terminate-child-processes')
ipcMain.on('child-processes-terminated', () => {
setTimeout(function () {
app.quit()
}, 5000)
})
}
}
])
tray.setToolTip('Geomec Cloud Manager')
tray.setContextMenu(trayMenu)
tray.on('click', () => {
mainWindow.object.show()
})
})
}
解决方案
根据文档,调用是:powerMonitor.querySystemIdleTime(callback)
并且正如错误消息所述,您没有提供所需的参数。
尝试改变:
console.log(powerMonitor.querySystemIdleTime())
到:
powerMonitor.querySystemIdleTime((idleSecs)=>{
console.log(`The system has been idle for ${idleSecs} seconds.`)
})
根据您的用例,它实际上是powerMonitor.querySystemIdleState(idleThreshold, callback)
您想要使用的,idleThreshold
设置为30 * 60
.
推荐阅读
- typescript - 打字稿仅从重载中选择特定方法(要传递给参数
) - visual-c++ - Imgur API & MSVSC++ 2015 Redis
- python - 了解 .loc 在项目(列表)分配中的行为
- c# - RDL 报告未呈现
- r - 矢量化 R 函数
- hex - 如何将文本文件中的 HEX 数据转换为字节列表,以便在 python 中通过索引访问?
- javascript - 更新数组挂钩中的对象反应js
- iis - “SharePoint 服务”证书是否随 SharePoint 安装自动安装?
- java - 如何避免或禁用 sshj 库的默认日志记录
- flutter - 颤振错误:“对象?”类型的值 不能分配给“地图”类型的变量
'