tray.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. // 开发环境,代码热更新开启时,会导致托盘中有残影
  13. // 目前没有找到合适的解决方案
  14. // 启用热更新功能时,不加载该模块
  15. // 如果调试该模式,请使用dev模式
  16. if (process.env.EE_SERVER_ENV == 'local' && process.env.HOT_RELOAD == 'true') return;
  17. eeApp.logger.info('[preload] load tray module');
  18. const trayConfig = eeApp.config.tray;
  19. const mainWindow = eeApp.electron.mainWindow;
  20. // 托盘图标
  21. let iconPath = path.join(eeApp.config.homeDir, trayConfig.icon);
  22. // 托盘菜单功能列表
  23. let trayMenuTemplate = [
  24. {
  25. label: '显示',
  26. click: function () {
  27. mainWindow.show();
  28. }
  29. },
  30. {
  31. label: '退出',
  32. click: function () {
  33. eeApp.appQuit();
  34. }
  35. }
  36. ]
  37. // 点击关闭,最小化到托盘
  38. mainWindow.on('close', (event) => {
  39. if (eeApp.electron.extra.closeWindow == true) {
  40. return;
  41. }
  42. mainWindow.hide();
  43. event.preventDefault();
  44. });
  45. // 测试发现:创建的Tray对象实例变量和app.whenReady()在同一模块中定义才行
  46. // 赋值给eeApp.electron.tray,已在框架ee-core包中定义
  47. // 如果赋值给其它变量,可能出现异常,估计是electron的bug
  48. eeApp.electron.tray = new Tray(iconPath);
  49. let appTray = eeApp.electron.tray;
  50. appTray.setToolTip(trayConfig.title); // 托盘标题
  51. const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
  52. appTray.setContextMenu(contextMenu);
  53. // 监听 显示/隐藏
  54. // appTray.on('click', function(){
  55. // if (mainWindow.isVisible()) {
  56. // mainWindow.hide();
  57. // //mainWindow.setSkipTaskbar(true);
  58. // } else {
  59. // mainWindow.show();
  60. // //mainWindow.setSkipTaskbar(false);
  61. // }
  62. // });
  63. }
  64. }