import { BrowserWindow, ipcMain, screen } from "electron"; import { join } from "node:path"; import { ICON, DIST, preload, url } from "../main/utils"; import log from "electron-log/main"; const NODE_ENV = process.env.NODE_ENV; const indexHtml = join(DIST, "./index.html"); let mainWindow: BrowserWindow | null; const extra = { activeClose: false, }; // 主窗口 const createWindow = (): BrowserWindow => { //动态适应宽高 const { width } = screen.getPrimaryDisplay().workAreaSize; // 设置窗口的宽度和高度 const winWidth = 420; const winHeight = 700; // 计算窗口在右上角的位置 const x = width - winWidth; const y = 10; // 创建浏览器窗口 mainWindow = new BrowserWindow({ title: "九海健康", icon: ICON, x, y, width: winWidth, height: winHeight, frame: false, show: false, // transparent: true, alwaysOnTop: true, // 始终在顶部 backgroundColor: "#fff", webPreferences: { preload, webviewTag: true, // 启用webview标签 // webSecurity: false, }, }); ipcMain.handle("get-window-info", async (event) => { const [width] = mainWindow?.getSize() || [0, 0]; // 获取当前窗口宽度 const display = screen.getPrimaryDisplay(); const scaleFactor = display.scaleFactor; // 缩放因子,例如 1.5 return { width, scaleFactor }; // 返回宽度值 }); mainWindow.setMenu(null); // 去掉顶部菜单 // log.info("Log from the main process"); // const args = process.argv.slice(2); // 去掉前两个默认参数(node 和 script 路径) // console.log("args==>", args); // 输出实际传递的参数 if (url) { mainWindow.loadURL(url); } else { mainWindow.loadFile(indexHtml); } // mainWindow.webContents.openDevTools(); // mainWindow.on("closed", () => { // mainWindow = null; // }); mainWindow.once("ready-to-show", () => { log.info("启动参数process.argv==> hidden表示开机重启成功", process.argv); if (process.argv.indexOf("--hidden") < 0) { showMainWin(); } }); // 监听窗口的关闭事件 mainWindow.on("close", (e) => { if (!extra.activeClose) { e.preventDefault(); hideMainWin(); } else { extra.activeClose = true; } }); return mainWindow; }; // 关闭窗口 function closeMainWin() { if (mainWindow?.isDestroyed()) { mainWindow!.close(); } mainWindow = null; } // 打开窗口 function openMainWin() { mainWindow = createWindow(); mainWindow!.show(); } // 显示窗口 function showMainWin() { if (!mainWindow || mainWindow?.isDestroyed()) { mainWindow = createWindow(); } mainWindow!.show(); } // 隐藏窗口 function hideMainWin() { mainWindow!.hide(); // app.quit(); } // 最小化窗口 function minimizeMainWin() { mainWindow!.minimize(); } // 最大化窗口 function maximizeMainWin() { mainWindow!.maximize(); } function middleMainWin() { if (mainWindow?.isMaximized()) { mainWindow.unmaximize(); } const display = screen.getPrimaryDisplay(); const { width } = display.workAreaSize; // 逻辑像素 const scaleFactor = display.scaleFactor; // 缩放因子,例如 1.5 let currentWidth = mainWindow?.getBounds().width || 0; const winSys = process.platform === "win32"; const baseWidth = winSys ? 420 * scaleFactor : 420; if (currentWidth && currentWidth > baseWidth) { mainWindow?.setBounds({ width: 420, x: width - 420, }); return; } mainWindow?.setBounds({ width: 840, x: width - 840, }); } // 取消最大化窗口 function unmaximizeMainWin() { mainWindow!.unmaximize(); } // 是否最大化 function isMaximized() { return mainWindow!.isMaximized(); } function focusMainWin() { if (mainWindow) { // Focus on the main window if the user tried to open another if (mainWindow.isMinimized()) mainWindow.restore(); mainWindow.focus(); } } export { mainWindow, extra, createWindow, closeMainWin, openMainWin, hideMainWin, showMainWin, focusMainWin, minimizeMainWin, isMaximized, maximizeMainWin, unmaximizeMainWin, middleMainWin, };