From c9f6062258d74bc4c54cebe17e3ed90b54ed7640 Mon Sep 17 00:00:00 2001 From: chenqiang Date: Tue, 9 Sep 2025 02:35:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/background/main.js | 48 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/background/main.js b/src/background/main.js index d06fc35..fff3e7f 100644 --- a/src/background/main.js +++ b/src/background/main.js @@ -57,6 +57,48 @@ async function createWindow() { // 然后显示窗口 mainWindow.show(); + // 添加窗口关闭事件监听 + mainWindow.on('close', (event) => { + console.log('检测到窗口关闭事件'); + + // 阻止默认的关闭行为 + event.preventDefault(); + console.log('已阻止默认关闭行为'); + + // 使用同步方式显示对话框(Electron 11.5支持的方式) + try { + // 直接显示对话框并获取结果 + const response = dialog.showMessageBoxSync(mainWindow, { + type: 'warning', + title: '确认关闭', + message: '确认要退出软件吗?退出后,未完成的考试将不会被保存。', + buttons: ['取消', '确认关闭'], + defaultId: 0, + cancelId: 0 + }); + + console.log('用户选择了response:', response); + + // 检查用户选择的按钮索引 + if (response === 1) { + console.log('用户确认关闭,准备退出应用'); + // 移除所有事件监听器以防止任何干扰 + mainWindow.removeAllListeners(); + // 强制关闭窗口 + mainWindow.destroy(); + // 然后退出应用 + setTimeout(() => { + console.log('强制退出应用'); + app.quit(); + }, 100); + } else { + console.log('用户取消关闭'); + } + } catch (error) { + console.error('显示对话框时出错:', error); + } + }); + if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL) @@ -85,6 +127,9 @@ app.on('activate', () => { // 添加退出确认逻辑 app.on('before-quit', (event) => { + console.log('检测到应用退出事件'); + // 注释掉这部分代码,因为我们已经在窗口的close事件中处理了确认逻辑 + /* // 如果是MacOS系统,让系统默认处理 if (process.platform === 'darwin') { return @@ -102,7 +147,7 @@ app.on('before-quit', (event) => { dialog.showMessageBox(mainWindow, { type: 'warning', title: '确认关闭', - message: '系统关闭后,已进行的试题将不会被保存,是否确认要关闭?', + message: '确认要退出软件吗?退出后,未完成的考试将不会被保存。', buttons: ['取消', '确认关闭'], defaultId: 0, cancelId: 0 @@ -114,6 +159,7 @@ app.on('before-quit', (event) => { }).catch((err) => { console.error('显示退出确认对话框失败:', err) }) + */ }) // This method will be called when Electron has finished