tray.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. const {Tray, Menu} = require('electron');
  3. const path = require('path');
  4. /**
  5. * 托盘模块
  6. */
  7. module.exports = {
  8. /**
  9. * 安装
  10. */
  11. install (eeApp) {
  12. console.log('[preload] load tray module');
  13. const trayConfig = eeApp.config.tray;
  14. const mainWindow = eeApp.electron.mainWindow;
  15. // 托盘图标
  16. let iconPath = path.join(eeApp.config.homeDir, trayConfig.icon);
  17. // 托盘菜单功能列表
  18. let trayMenuTemplate = [
  19. {
  20. label: '显示',
  21. click: function () {
  22. mainWindow.show();
  23. }
  24. },
  25. {
  26. label: '退出',
  27. click: function () {
  28. eeApp.appQuit();
  29. }
  30. }
  31. ]
  32. // 点击关闭,最小化到托盘
  33. mainWindow.on('close', (event) => {
  34. mainWindow.hide();
  35. mainWindow.setSkipTaskbar(true);
  36. event.preventDefault();
  37. });
  38. mainWindow.show();
  39. // 测试发现:创建的Tray对象实例变量和app.whenReady()在同一模块中定义才行
  40. // 赋值给eeApp.electron.tray,已在框架ee-core包中定义
  41. // 如果赋值给其它变量,可能出现异常,估计是electron的bug
  42. eeApp.electron.tray = new Tray(iconPath);
  43. let appTray = eeApp.electron.tray;
  44. appTray.setToolTip(trayConfig.title); // 托盘标题
  45. const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
  46. appTray.setContextMenu(contextMenu);
  47. // 监听 显示/隐藏
  48. appTray.on('click', function(){
  49. if (mainWindow.isVisible()) {
  50. mainWindow.hide();
  51. mainWindow.setSkipTaskbar(false);
  52. } else {
  53. mainWindow.show();
  54. mainWindow.setSkipTaskbar(true);
  55. }
  56. });
  57. }
  58. }