Files
Nano-Banana-AI-Image-Editor/electron/main.ts
2025-10-07 00:53:54 +08:00

113 lines
3.4 KiB
TypeScript

import { app, BrowserWindow, ipcMain, globalShortcut } from 'electron';
import * as path from 'path';
let mainWindow: BrowserWindow | null = null;
const createWindow = () => {
// Create the browser window.
mainWindow = new BrowserWindow({
width: 1600,
height: 900,
frame: false, // 隐藏默认的窗口框架
icon: path.join(__dirname, '../../build/icon.ico'), // 设置应用图标
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false,
contextIsolation: true,
devTools: process.env.NODE_ENV === 'development', // 仅在开发环境中启用开发者工具
},
});
// and load the index.html of the app.
if (process.env.VITE_DEV_SERVER_URL) {
mainWindow.loadURL(process.env.VITE_DEV_SERVER_URL);
// 仅在开发环境中打开开发者工具
mainWindow.webContents.openDevTools();
} else {
// 使用绝对路径从项目根目录的 dist 文件夹加载
const indexPath = path.join(__dirname, '../../dist/index.html');
console.log('Loading index.html from:', indexPath);
mainWindow.loadFile(indexPath);
// 在生产环境中确保关闭开发者工具
mainWindow.webContents.closeDevTools();
}
};
// IPC 处理程序
ipcMain.handle('window-minimize', () => {
if (mainWindow) {
mainWindow.minimize();
}
});
ipcMain.handle('window-maximize', () => {
if (mainWindow) {
if (mainWindow.isMaximized()) {
mainWindow.unmaximize();
} else {
mainWindow.maximize();
}
}
});
ipcMain.handle('window-close', () => {
if (mainWindow) {
mainWindow.close();
}
});
ipcMain.handle('window-is-maximized', () => {
return mainWindow ? mainWindow.isMaximized() : false;
});
// 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(() => {
createWindow();
// 在生产环境中禁用开发者工具快捷键
if (process.env.NODE_ENV !== 'development') {
// 注册全局快捷键拦截
globalShortcut.register('Control+Shift+I', () => {
// 拦截快捷键,不执行任何操作
console.log('Developer tools shortcut intercepted in production');
});
globalShortcut.register('Control+Shift+J', () => {
// 拦截快捷键,不执行任何操作
console.log('Developer tools console shortcut intercepted in production');
});
globalShortcut.register('F12', () => {
// 拦截快捷键,不执行任何操作
console.log('Developer tools F12 shortcut intercepted in production');
});
}
// On OS X it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
app.on('activate', () => {
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();
}
});
// 在应用退出时取消注册所有全局快捷键
app.on('will-quit', () => {
// 取消注册所有快捷键
globalShortcut.unregisterAll();
});
// 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 import them here.