【问题标题】:Electron global shortcut to toggle show/hide of menubar用于切换菜单栏显示/隐藏的电子全局快捷方式
【发布时间】:2017-01-12 08:41:07
【问题描述】:

我正在尝试向我的 Electron 应用程序添加一个全局快捷方式,以切换显示/隐藏它。我的应用是使用 maxogden/menubar 和 React 构建的菜单栏应用。

我有以下代码。为了简洁起见,我留下了一些内容,但这就是我设置全局快捷方式的方式。

我认为注意maxogden/menubar Readme 上的提示之一也很重要:

使用 mb.on('after-create-window', callback) 在你之后运行 应用已加载

const { globalShortcut } = require('electron');
const keyboardShortcuts = {
  open: 'CommandOrControl+Shift+g',
  close: 'CommandOrControl+Shift+g'
}

menu.on('after-create-window', () => {
  globalShortcut.register(keyboardShortcuts.open, () => {
    menu.window.show();
  });
});

menu.on('after-show', () => {
  globalShortcut.unregister(keyboardShortcuts.open);
  globalShortcut.register(keyboardShortcuts.close, () => {
    menu.window.hide();
  });
});

menu.on('focus-lost', () => {
  globalShortcut.unregister(keyboardShortcuts.close);
  globalShortcut.register(keyboardShortcuts.open, () => {
    menu.window.show();
  });
});

第一次打开菜单栏后,我的快捷方式已注册并可以显示应用程序。但是,我为unregister 快捷方式实现的代码,并重新注册它以隐藏应用程序(显示时),似乎不起作用。

我不确定我的重新注册快捷方式的代码是否设置在正确的事件处理程序中,即after-showfocus-lost。我感觉我正在使用的这些事件处理程序与我的menu 直接相关,而不是menu.window。这可以解释为什么没有重新注册快捷方式,但我不确定。

有谁知道我将如何明智地设置一个全局快捷方式来打开/关闭我的菜单栏应用程序?

【问题讨论】:

    标签: javascript reactjs keyboard-shortcuts electron menubar


    【解决方案1】:

    从菜单栏文档 (https://github.com/maxogden/menubar) 中,菜单栏实例公开了以下方法:

    {
      app: the electron require('app') instance,
      window: the electron require('browser-window') instance,
      tray: the electron require('tray') instance,
      positioner: the electron-positioner instance,
      setOption(option, value): change an option after menubar is created,
      getOption(option): get an menubar option,
      showWindow(): show the menubar window,
      hideWindow(): hide the menubar window
    }
    

    使用menu.showWindow()menu.hideWindow() 代替menu.window.show()menu.window.hide() 会起作用。

    我会进一步建议您使用内置事件来管理您的状态,简化您的代码和实现:

    const { globalShortcut } = require('electron');
    
    let isShown = false;
    menu
      .on('after-show', () => { isShown = true })
      .on('after-hide', () => { isShown = false })
      .on('focus-lost', () => { isShown = false });
    
    globalShortcut.register('CommandOrControl+Shift+g', () => {
      isShown ? menu.hideWindow() : menu.showWindow()
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多