main.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { app, BrowserWindow, Menu } from 'electron';
  2. import { isDev } from './env';
  3. import { createMainWindow, createIndexWindow } from './utils/window';
  4. import { getAppInfo } from './utils';
  5. import './ipc';
  6. // 隐藏所有菜单
  7. Menu.setApplicationMenu(null);
  8. let mainWindow: BrowserWindow | null = null;
  9. function main() {
  10. mainWindow = createMainWindow();
  11. // 代码逻辑说明: 【JHHB-13】桌面应用消息通知
  12. mainWindow.on('focus', () => {
  13. // 清除任务栏闪烁
  14. if (process.platform === 'win32') {
  15. mainWindow!.flashFrame(false);
  16. }
  17. });
  18. return mainWindow;
  19. }
  20. // 非开发环境,只允许一个实例运行
  21. if (!isDev) {
  22. // 是否取得了单一实例锁
  23. const gotTheLock = app.requestSingleInstanceLock();
  24. if (gotTheLock) {
  25. app.on('second-instance', () => {
  26. // 开启一个新的窗口
  27. createIndexWindow();
  28. });
  29. } else {
  30. // 没有取得单一实例锁,则退出应用
  31. app.exit(0);
  32. }
  33. }
  34. // 生命周期管理
  35. app.whenReady().then(() => {
  36. // 获取应用信息
  37. const $appInfo = getAppInfo();
  38. if ($appInfo?.productName && $appInfo?.appId) {
  39. app.setName($appInfo.productName);
  40. app.setAppUserModelId($appInfo.appId);
  41. }
  42. main();
  43. app.on('activate', () => {
  44. if (BrowserWindow.getAllWindows().length === 0) {
  45. main();
  46. }
  47. });
  48. });
  49. app.on('window-all-closed', () => {
  50. if (process.platform !== 'darwin') {
  51. app.quit();
  52. }
  53. });