簡體   English   中英

電子全局快捷方式,可切換菜單欄的顯示/隱藏

[英]Electron global shortcut to toggle show/hide of menubar

我正在嘗試向我的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 這可以解釋為什么沒有重新注冊快捷方式的原因,但是我不確定。

有誰知道我如何合理地設置全局快捷方式開關來打開/關閉菜單欄應用程序?

從菜單欄文檔( 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()
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM