9.设置菜单和绑定快捷键
-- 未经授权禁止转载 --
main.js
	import { app, BrowserWindow, ipcMain, nativeTheme, Menu, shell } from "electron"
	import url from 'url'
	import path from 'path'
	import os from 'os'

	let __filename = url.fileURLToPath(import.meta.url)
	let __dirname = path.dirname(__filename)

	//console.log(os.version()) //内核版本
	//console.log("邓瑞编程")

	//nativeTheme.themeSource = 'dark' //设置为深色主题

	//创建菜单
	const createMenu = () => {
	    /*
	    //基础模板
	    let template = [
	        {
	            label: '工具(T)',
	            submenu: [
	                {
	                    label: '刷新',
	                },
	                {
	                    label: '切换开发者工具',
	                }
	            ]
	        },
	        {
	            label: '帮助(H)',
	        }
	    ]
	    */
	    let template = [
	        {
	            label: '工具(T)',
	            submenu: [
	                {
	                    label: '刷新',
	                    //CmdOrCtrl [Cmd是Mac的Command键] [Ctrl是Windows和Linux的Control键]
	                    //accelerator: 'CmdOrCtrl+R', //自定义跨平台快捷键 [ CmdOrCtrl 适用于 Mac 和 Windows/Linux ]
	                    accelerator: 'F5',
	                    //[item 是被点击的菜单项] [focusedWindow 是当前处于焦点的窗口]
	                    click: (item, focusedWindow) => {
	                        if (focusedWindow) {
	                            focusedWindow.reload() //重新加载当前处于焦点的窗口中的内容
	                        }
	                    }
	                },
	                {
	                    label: '切换开发者工具',
	                    //accelerator: 'CmdOrCtrl+Shift+I',
	                    accelerator: 'F12',
	                    click: (item, focusedWindow) => {
	                        if (focusedWindow) {
	                            focusedWindow.webContents.toggleDevTools() //在当前处于焦点的窗口中切换开发者工具
	                        }
	                    }
	                }
	            ]
	        },
	        {
	            label: '帮助(H)',
	            submenu: [
	                {
	                    label: '关于',
	                    click: () => {
	                        shell.openExternal('https://dengruicode.com') //打开外部链接
	                    }
	                }
	            ]
	        }
	    ]
	    
	    const menu = Menu.buildFromTemplate(template) //根据模板构建菜单
	    Menu.setApplicationMenu(menu) //设置菜单
	}

	//创建窗口
	const createWindow = () => {
	    const mainWindow = new BrowserWindow({
	        width: 1300, //设置窗口宽度(单位:像素)
	        height: 750, //设置窗口高度
	        icon: "resource/images/code.ico", //设置窗口图标
	        //autoHideMenuBar:true, //隐藏菜单栏
	        //resizable: false, //禁止调整窗口大小
	        //x:0, //x表示窗口左上角的水平坐标(单位:像素)
	        //y:0, //y表示窗口左上角的垂直坐标
	        webPreferences: { //网页偏好设置
	            nodeIntegration: true, //允许在渲染进程中直接使用 Node.js API
	            contextIsolation: true, //启用上下文隔 (提高安全性)
	            preload: path.resolve(__dirname,"resource/preload/preload.mjs"), //预加载脚本
	        }
	    })

	    //mainWindow.loadURL("https://www.dengruicode.com") //加载指定的 url
	    mainWindow.loadFile("resource/renderer/views/index.html") //加载本地 html

	    //当尝试打开新窗口时, 阻止默认行为, 在当前窗口加载 url
	    mainWindow.webContents.setWindowOpenHandler(details =>{
	        mainWindow.loadURL(details.url)
	        return { action: 'deny' } //阻止默认行为
	    })
	}

	//当应用准备就绪后创建窗口
	app.whenReady().then(() => {
	    createMenu() //创建菜单
	    createWindow() //创建窗口
	})

	//定义了一个处理函数, 用于响应名为 sendDataToMain 的异步调用
	//当渲染进程通过 sendDataToMain 发起调用时, 处理函数会被触发
	ipcMain.handle('sendDataToMain', (e,data) => {
	    console.log(data)

	    return data
	})

	//切换主题
	ipcMain.handle("toggleTheme", () => {
	    if (nativeTheme.shouldUseDarkColors) { //如果系统为深色主题时
	        nativeTheme.themeSource = 'light' //设置为浅色主题
	        return "浅色主题"
	    } else {
	        nativeTheme.themeSource = 'dark' //设置为深色主题
	        return "深色主题"
	    }
	})