javascript - 使用全局快捷方式(如 Spotlight/Launchy)将 Electron 应用程序带到前台

标签 javascript electron

我希望复制类似于 Launchy/Quicksilver/Spotlight 的行为。

我想要一个始终运行的 Electron 应用程序。当我按下快捷键时, Electron 应用程序会被带到前台并聚焦。

我知道 globalShortcut 模块可用于绑定(bind)快捷方式,但我不知道如何让该快捷方式触发将应用程序带到前台。

任何帮助将不胜感激......

最佳答案

让我们从最简单的情况开始,然后构建我们的解决方案以更好地处理一些边缘情况。

最简单的情况是在按下我们注册的全局快捷方式时显示一个已经打开的窗口。

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();
});

有了它,您应该具备了基本功能。你按下你的全局快捷方式,窗口就会出现。关闭它并按下按键并观察它重新出现。

关于javascript - 使用全局快捷方式(如 Spotlight/Launchy)将 Electron 应用程序带到前台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893426/

相关文章:

google-chrome - Electron 网页 View 在极少数情况下会变得困惑

windows - 如何将消息从 Electron 发送到另一个进程(其他 native Windows 应用程序)

javascript - 对象未在 Javascript 中返回所需的对象

Javascript cookie 代码不起作用

javascript - 重定向后,我的 JavaScript 代码将无法运行

javascript - Electron < WebView > : Uncaught SyntaxError: Unexpected token

javascript - 原子外壳中的关键事件

javascript - 如何在Go中解密使用aes-js包在vuejs中加密的密文

javascript - 如何使用 jquery isotope 按日期排序(新)

javascript - 将arcgis js api弹出单击事件更改为右键单击