我希望复制类似于Launchy / Quicksilver / Spotlight的行为。
我希望有一个始终在运行的电子应用程序。当我点击快捷键时,电子应用程序将被带到前台并进行聚焦。
据我所知,globalShortcut模块可用于绑定快捷方式,但我无法弄清楚如何使该快捷方式触发器将应用程序置于前台。
非常感谢任何帮助......
答案 0 :(得分:17)
让我们从最简单的情况开始,然后构建我们的解决方案以更好地处理一些边缘情况。
最简单的情况是,只要按下我们注册的全局快捷方式,就会显示一个已经打开的窗口。
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();
});
然后你应该有基本的功能。按下全局快捷方式,将出现窗口。关闭它并按下键并再次观看它。