让我们从最简单的情况开始,然后构建我们的解决方案以更好地处理一些边缘情况。
最简单的情况是,只要按下我们注册的全局快捷方式,就显示一个已经打开的窗口。
const path = require('path');
const { app, BrowserWindow, globalShortcut } = require('electron');
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow();
mainWindow.loadURL(path.join(__dirname, 'index.html'));
const shortcut = globalShortcut.register('Control+Space', () => {
mainWindow.show();
});
if (!shortcut) { console.log('Registration failed.'); }
});
不过这段代码有一些问题。好消息是,如果窗口最小化,它仍然有效。坏消息是,如果窗口已关闭,它将无法工作。这是因为关闭最后一个窗口会退出应用程序。真糟糕。 (坦白说,我对此有点惊讶——但这就是发生的事情。所以,让我们继续吧。)
让我们阻止这种情况发生。
app.on('window-all-closed', (event) => {
event.preventDefault();
});
好的,我们的应用程序没有退出,但崩溃了。
Uncaught Exception:
Error: Object has been destroyed
好吧,好吧。这是因为窗口关闭时会被破坏。所以,我们不要关闭它。我们把它藏起来吧?之内app.on('ready', () => {…})
,添加以下内容:
mainWindow.on('close', (event) => {
event.preventDefault();
mainWindow.hide();
});
最终结果如下所示:
const path = require('path');
const { app, BrowserWindow, globalShortcut } = require('electron');
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow();
mainWindow.loadURL(path.join(__dirname, 'index.html'));
const shortcut = globalShortcut.register('Control+Space', () => {
mainWindow.show();
});
if (!shortcut) { console.log('Registration failed.'); }
mainWindow.on('close', (event) => {
event.preventDefault();
mainWindow.hide();
});
});
app.on('window-all-closed', (event) => {
event.preventDefault();
});
这样您就应该具备基本功能了。您按下全局快捷键,就会出现该窗口。关闭它并按下按键并观察它重新出现。