Javascript 使用全局快捷方式(如Spotlight/Launchy)将电子应用程序带到前台

Javascript 使用全局快捷方式(如Spotlight/Launchy)将电子应用程序带到前台,javascript,electron,Javascript,Electron,我希望复制类似Launchy/Quicksilver/Spotlight的行为 我想有一个电子应用程序,始终运行。当我按下快捷键时,electron应用程序被带到前台并聚焦 我知道globalShortcut模块可以用来绑定快捷方式,但是我不知道如何使该快捷方式触发将应用程序带到前台 任何帮助都将不胜感激……让我们从最简单的案例开始,然后构建解决方案以更好地处理一些边缘案例 最简单的情况是,只要按下我们注册的全局快捷方式,就会显示一个已经打开的窗口 const path = require('p

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

我想有一个电子应用程序,始终运行。当我按下快捷键时,electron应用程序被带到前台并聚焦

我知道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();
});
有了它,您就应该有了基本的功能。按下全局快捷键,窗口就会出现。将其关闭并按键,然后观察其重新出现