import { app, shell, BrowserWindow, ipcMain } from 'electron' import { join } from 'path' import { electronApp, optimizer, is } from '@electron-toolkit/utils' import icon from '../../resources/icon.png?asset' import { handleFile } from './files' const net = require('net') function createWindow(): void { // Create the browser window. const mainWindow = new BrowserWindow({ width: 1920, height: 1080, show: false, autoHideMenuBar: true, ...(process.platform === 'linux' ? { icon } : {}), webPreferences: { preload: join(__dirname, '../preload/index.js'), sandbox: false } }) mainWindow.removeMenu() mainWindow.on('ready-to-show', () => { mainWindow.show() }) mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) return { action: 'deny' } }) // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. if (is.dev && process.env['ELECTRON_RENDERER_URL']) { mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) } else { mainWindow.loadFile(join(__dirname, '../renderer/index.html')) } // 开发者工具 if (is.dev) { mainWindow.webContents.openDevTools() } // pipe命名管道通信 ipcMain.on('connect-pipe', () => { try { const pipe = net.connect('\\\\.\\Pipe\\MyPipeServer') pipe.on('connect', () => { mainWindow.webContents.send('pipe-connected', pipe) }) pipe.on('data', (data) => { mainWindow.webContents.send('pipe-message', data.toString()) }) pipe.on('error', (data) => { mainWindow.webContents.send('pipe-error', data.toString()) console.log('pipe error:', data) }) ipcMain.on('pipe-end', () => { pipe.end() }) } catch (error) { console.error('Error connecting to pipe:', error) } }) } // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.whenReady().then(() => { // Set app user model id for windows electronApp.setAppUserModelId('com.electron') // Default open or close DevTools by F12 in development // and ignore CommandOrControl + R in production. // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils app.on('browser-window-created', (_, window) => { optimizer.watchWindowShortcuts(window) }) // IPC test ipcMain.on('ping', () => console.log('pong')) // 文件处理 handleFile() createWindow() app.on('activate', function () { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) // In this file you can include the rest of your app's specific main process // code. You can also put them in separate files and require them here.