电子菜单加速器不工作

Mik*_*ndy 5 electron

我正在学习 Pluralsight 上的电子基础知识课程(Trent,2016)。我无法让加速器在“退出”菜单项上工作。下面是我的整个 main.js 文件。据我所知,菜单已成功创建(如下图),直接单击“退出”菜单项确实会关闭应用程序,但 Alt+W 组合键不会关闭该应用程序。我使用的是 Windows 10。我缺少什么?

菜单截图

const electron = require('electron');

const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const Menu = electron.Menu;

app.on('ready', _ => {
    new BrowserWindow();

    const template = [
    {
        label: "File",
        submenu: [{
            label: 'About',
            click: _ => {
                console.log('clicked');
            }
        },
        {
            type: 'separator'
        },
        {
            label: 'Quit',
            accelerator: 'Alt+W',
            click: _ => {
                app.quit();
            }
        }]
    }];

    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
});
Run Code Online (Sandbox Code Playgroud)

jus*_*7a3 3

accelerator不再支持字符串。该文档在v1.4.5中进行了更新,以阐明如何使用globalShortcut.

加速器文档:快捷方式使用 register 方法向 globalShortcut 模块注册,即

   const {app, globalShortcut} = require('electron')

   app.on('ready', () => {
     // Register a 'CommandOrControl+Y' shortcut listener.
     globalShortcut.register('CommandOrControl+Y', () => {
       // Do stuff when Y and either Command/Control is pressed.
     })
   })
Run Code Online (Sandbox Code Playgroud)

所以将你的代码更改为这样

const electron = require('electron');

const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const Menu = electron.Menu;
const globalShortcut = electron.globalShortcut;

app.on('ready', _ => {
    new BrowserWindow();

    // Declare shortcuts
    globalShortcut.register('Alt+W', () => app.quit());

    const template = [
    {
        label: "File",
        submenu: [{
            label: 'About',
            click: _ => {
                console.log('clicked');
            }
        },
        {
            type: 'separator'
        },
        {
            label: 'Quit',
            click: _ => {
                app.quit();
            }
        }]
    }];

    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
});
Run Code Online (Sandbox Code Playgroud)