我在寻找复制类似于Launchy/Quicksilver/Spotlight的行为。使用全局快捷方式将电子应用程序移至前景(如Spotlight/Launchy)
我想要一个始终运行的电子应用程序。当我点击一个快捷键时,电子应用程序被带到前台并聚焦。
据我所知,globalShortcut模块可以用来绑定一个快捷方式,但我不知道如何使该快捷方式触发应用程序到前台。
任何帮助,将不胜感激......
我在寻找复制类似于Launchy/Quicksilver/Spotlight的行为。使用全局快捷方式将电子应用程序移至前景(如Spotlight/Launchy)
我想要一个始终运行的电子应用程序。当我点击一个快捷键时,电子应用程序被带到前台并聚焦。
据我所知,globalShortcut模块可以用来绑定一个快捷方式,但我不知道如何使该快捷方式触发应用程序到前台。
任何帮助,将不胜感激......
让我们先从最简单的情况,然后建立我们的解决方案,以更好地处理一些边缘情况。
最简单的情况是显示一个窗口,只要我们注册的全局快捷方式被按下,窗口就已经打开。
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();
});
有了这样你应该有到位的基本功能。你按下你的全局快捷键,出现窗口。关闭它,然后按下键并观察它重新出现。