1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import { ipcMain, BrowserWindow } from 'electron';
- import { join } from 'path';
- // export
- let childrenWindows: BrowserWindow[] = [];
- async function handleStartWinProcess(
- event: Electron.IpcMainEvent,
- processCount: number,
- loadPageUrl: string
- ) {
- if (childrenWindows.length) {
- childrenWindows.forEach((win) => win && win.close());
- childrenWindows = [] as BrowserWindow[];
- }
- const parentWindow = BrowserWindow.getFocusedWindow();
- if (!parentWindow) return;
- const createWins = [] as Promise<BrowserWindow>[];
- for (let i = 0; i < processCount; i++) {
- createWins.push(buildChildWindow(parentWindow, loadPageUrl));
- }
- childrenWindows = await Promise.all(createWins);
- }
- async function buildChildWindow(
- parentWindow: BrowserWindow,
- loadPageUrl: string
- ) {
- const childWin = new BrowserWindow({
- // width: 1428,
- // height: 700,
- width: 400,
- height: 400,
- show: false,
- parent: parentWindow,
- webPreferences: {
- preload: join(__dirname, '../preload/index.js'),
- sandbox: false,
- webSecurity: false,
- },
- });
- const pageUrl = `${loadPageUrl}&winId=${childWin.id}`;
- if (process.env.ELECTRON_RENDERER_URL) {
- // Load the url of the dev server if in development mode
- await childWin.loadURL(process.env.ELECTRON_RENDERER_URL + pageUrl);
- // childWin.webContents.openDevTools();
- } else {
- // Load the index.html when not in development
- await childWin.loadURL(`app://./index.html${pageUrl}`);
- }
- return childWin;
- }
- function handleStopWinProcess() {
- if (!childrenWindows.length) return;
- childrenWindows.forEach((cwin) => {
- cwin.webContents.send('stop-running');
- });
- }
- function handleCloseProcessWindow(event: Electron.IpcMainEvent, winId: number) {
- if (!childrenWindows.length) return;
- const pos = childrenWindows.findIndex((item) => item.id === winId);
- if (pos !== -1) {
- childrenWindows[pos].close();
- childrenWindows.splice(pos, 1);
- }
- }
- export default function useWinProcess() {
- ipcMain.on('start-win-process', handleStartWinProcess);
- ipcMain.on('stop-win-process', handleStopWinProcess);
- ipcMain.on('close-process-window', handleCloseProcessWindow);
- }
|