#javascript #node.js #electron
Вопрос:
Я разработал приложение, и я хочу сделать это, если пользователь ничего не сделает за 30 минут, закройте приложение.
Поэтому я поискал его в Google, чтобы решить эту проблему, и обнаружил, что в electron есть API PowerMonitor, но проблема в том, что мое приложение старой версии (Electron 3.1.14), поэтому оно не поддерживает различные методы.
Электронные документы API PowerMonitor
Я думаю, что мне следует использовать powerMonitor.querySystemIdleTime()
метод, и я попытался протестировать API «pwoerMonitor», поэтому я вставил код, но
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()
})
})
}
Ответ №1:
Согласно документам, вызов звучит так: 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
.