写在前面的话
在做前端项目时,需要将 Web 项目打包成 Win 应用,使用 Electron 相关技术。这个系列是整理 Electron 学习中遇到的问题和常见知识点,留做记录方便后续复习。
本篇介绍:
- Electron 系统托盘实现
- Electron 开机自动启动
系统托盘 && 开机自启
在 Electron 中提供了系统托盘的 API - [Tray],参考后面的链接。所有需要引入Tray
和 Menu
。
1 2 3 4
| import { Menu, Tray } from 'electron'
let tray = null
|
目标系统是 win ,其他的平台限制请参考文档。 通过 process.platform
限制系统。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| function createTray() { if (process.platform === 'win32') { const icon = process.env.NODE_ENV === 'development' ? path.join(__dirname, 'bundled/favicon.ico') : path.join(__dirname, 'favicon.ico')
tray = new Tray(icon) let menu = Menu.buildFromTemplate([ { label: '开机启动', checked: app.getLoginItemSettings().openAtLogin, type: 'checkbox', click: () => { if (!app.isPackaged) { app.setLoginItemSettings({ openAtLogin: !app.getLoginItemSettings().openAtLogin, path: process.execPath }) } else { app.setLoginItemSettings({ openAtLogin: !app.getLoginItemSettings().openAtLogin }) } } }, { label: '退出', click: function() { app.quit() app.quit() } } ]) tray.setToolTip('微笑榆山') tray.setContextMenu(menu) tray.on('click', () => { win.isVisible() ? win.hide() : win.show() }) } }
|
上面代码示例中完成对系统托盘和自启动的配置
注意:在配置图标时,需要区分开发环境。开发环境中加载根目录.ico
图标,而生成环境中需要加载前端打包后所在的目录中的 .ico
图标。
参考