tray.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. eeApp.logger.info('[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. if (eeApp.electron.extra.closeWindow == true) {
  35. return;
  36. }
  37. mainWindow.hide();
  38. event.preventDefault();
  39. });
  40. // 测试发现:创建的Tray对象实例变量和app.whenReady()在同一模块中定义才行
  41. // 赋值给eeApp.electron.tray,已在框架ee-core包中定义
  42. // 如果赋值给其它变量,可能出现异常,估计是electron的bug
  43. eeApp.electron.tray = new Tray(iconPath);
  44. let appTray = eeApp.electron.tray;
  45. appTray.setToolTip(trayConfig.title); // 托盘标题
  46. const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
  47. appTray.setContextMenu(contextMenu);
  48. // 监听 显示/隐藏
  49. // appTray.on('click', function(){
  50. // if (mainWindow.isVisible()) {
  51. // mainWindow.hide();
  52. // //mainWindow.setSkipTaskbar(true);
  53. // } else {
  54. // mainWindow.show();
  55. // //mainWindow.setSkipTaskbar(false);
  56. // }
  57. // });
  58. }
  59. }