From 58c48989294b986be419221ed1bbe4f19251917a Mon Sep 17 00:00:00 2001 From: younglei Date: Tue, 14 Jun 2022 20:21:14 +0800 Subject: [PATCH] add electron-main/ --- electron-main/index.ts | 92 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 electron-main/index.ts diff --git a/electron-main/index.ts b/electron-main/index.ts new file mode 100644 index 0000000..8818fa3 --- /dev/null +++ b/electron-main/index.ts @@ -0,0 +1,92 @@ +import { app, BrowserWindow, shell, ipcMain } from 'electron' +import { release } from 'os' +import { join } from 'path' + +// Disable GPU Acceleration for Windows 7 +if (release().startsWith('6.1')) app.disableHardwareAcceleration() + +// Set application name for Windows 10+ notifications +if (process.platform === 'win32') app.setAppUserModelId(app.getName()) + +if (!app.requestSingleInstanceLock()) { + app.quit() + process.exit(0) +} +process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true' + +let win: BrowserWindow | null = null +// Here, you can also use other preload +const splash = join(__dirname, '../electron-preload/splash.js') +// 🚧 Use ['ENV_NAME'] avoid vite:define plugin +const url = `http://${process.env['VITE_DEV_SERVER_HOST']}:${process.env['VITE_DEV_SERVER_PORT']}` + +async function createWindow() { + win = new BrowserWindow({ + title: 'Main window', + webPreferences: { + preload: splash, + nodeIntegration: true, + contextIsolation: false, + }, + }) + + if (app.isPackaged) { + win.loadFile(join(__dirname, '../index.html')) + } else { + win.loadURL(url) + // win.webContents.openDevTools() + } + + // Test active push message to Renderer-process + win.webContents.on('did-finish-load', () => { + win?.webContents.send('main-process-message', new Date().toLocaleString()) + }) + + // Make all links open with the browser, not with the application + win.webContents.setWindowOpenHandler(({ url }) => { + if (url.startsWith('https:')) shell.openExternal(url) + return { action: 'deny' } + }) +} + +app.whenReady().then(createWindow) + +app.on('window-all-closed', () => { + win = null + if (process.platform !== 'darwin') app.quit() +}) + +app.on('second-instance', () => { + if (win) { + // Focus on the main window if the user tried to open another + if (win.isMinimized()) win.restore() + win.focus() + } +}) + +app.on('activate', () => { + const allWindows = BrowserWindow.getAllWindows() + if (allWindows.length) { + allWindows[0].focus() + } else { + createWindow() + } +}) + +// new window example arg: new windows url +ipcMain.handle("open-win", (event, arg) => { + const childWindow = new BrowserWindow({ + webPreferences: { + preload: splash, + }, + }) + + if (app.isPackaged) { + childWindow.loadFile(join(__dirname, `../renderer/index.html`), { + hash: `${arg}`, + }) + } else { + childWindow.loadURL(`${url}/#${arg}`) + // childWindow.webContents.openDevTools({ mode: "undocked", activate: true }) + } +})