使用全局快捷方式(如 Spotlight/Launchy)将电子应用程序带到前台
Bringing an electron app to foreground with a global shortcut (like Spotlight/Launchy)
我希望复制类似于Launchy/Quicksilver/Spotlight的行为。
我想要一个始终运行的电子应用程序。当我按下快捷键时,电子应用程序被带到前台并聚焦。
我知道 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();
});
有了这个,您应该拥有基本功能。按全局快捷方式,窗口将出现。关闭它并按按键并观看它重新出现。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在phonegap应用程序内部重定向不起作用
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 使用全局快捷方式(如 Spotlight/Launchy)将电子应用程序带到前台
- 如何在Javascript Win8 Metro应用程序中捕获前台和后台事件
- 如何检查应用程序是在前台还是后台
- 在Mac OS X上使用Selenium进行测试时,如何强制Firefox成为前台应用程序
- 如何使用Node.js获取在Mac前台运行的应用程序窗口的坐标