chenyc
2025-01-24 fe2618c213d59d2fe3cbef757cfe593ba46a56e5
electron/main/index.ts
@@ -1,13 +1,11 @@
import { app, BrowserWindow, shell, ipcMain,Menu } from 'electron'
import { app, BrowserWindow, shell, ipcMain,Menu, IpcMainEvent } from 'electron'
import { release } from 'os'
import { join } from 'path'
// import updater from "../preload/autoUpdate.js"
import logger from '../preload/logger.js'
import fs from 'fs'
import iconv from 'iconv-lite'
//koa----
import  Koa from 'koa';
import  Router from 'koa-router';
import { checkUpdate } from './appVersion.js';
const koaBody = require('koa-body');
const creatorKoa=(win)=>{
  const app = new Koa();
@@ -64,8 +62,13 @@
  
  win = new BrowserWindow({
    title: 'Main window',
    transparent: true,
    frame:store.get('debug')===undefined?true:store.get('debug'),//关闭菜单栏
    fullscreen: true,// 开启默认全屏
    autoHideMenuBar:store.get('debug'), //关闭菜单栏
    kiosk: true,
    movable:false,// 关闭窗口移动
    // autoHideMenuBar:store.get('debug'),
    webPreferences: {
      preload: splash,
      nodeIntegration: true,
@@ -103,6 +106,8 @@
})
app.on('second-instance', () => {
  if (win) {
    // 如果用户试图打开另一个窗口,则将焦点放在主窗口上
@@ -110,6 +115,14 @@
    win.focus()
  }
})
app.on('render-process-gone',(e,w,d)=>{
  logger.info(`${new Date()}渲染进程被杀死${d.reason}\n`)
  // 基于我在开发的程序本身的设定,此处重启应用就可以了
  app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])});
  // 尝试关闭所有窗口
  app.quit();
})
app.on('activate', () => {
  const allWindows = BrowserWindow.getAllWindows()
@@ -147,6 +160,31 @@
    logger.info(arg)
  })
})
/**
* 版本更新检测
*/
ipcMain.handle("check-update",(e:any)=>{
  // 获取发送通知的渲染进程窗口
  const currentWin = getWindowByEvent(e);
  // 升级校验
  checkUpdate(currentWin);
});
/**
 * 通过窗口事件获取发送者的窗口
 * @param event ipc发送窗口事件
 */
function getWindowByEvent(event: IpcMainEvent): BrowserWindow {
  const webContentsId = event.sender.id;
  for (const currentWin of BrowserWindow.getAllWindows()) {
    if (currentWin.webContents.id === webContentsId) {
      return currentWin;
    }
  }
  return null;
}
// 渲染端发送消息到主进程
ipcMain.on("winClose",()=>{
  win?.close()