电子菜单加速器不工作

electron menu accelerator not working

我正在学习 Pluralsight 上的电子基础课程(Trent,2016 年)。我无法让加速器在我的 "Quit" 菜单项上工作。下面是我的整个 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);
});

在 Windows 上看起来它需要在 BrowserWindow 上加载一些东西。放置 loadURL 使其工作。不过需要尝试 loadURL 之外的东西..

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

    mainWindow.loadURL('https://github.com')

   const name = electron.app.getName()

    const template = [
        {
            label: name,
            submenu: [{
                label: `About ${name}` ,
                click: console.log('clicked!')
            },{
                type:'separator'
            },{
                label:'Quit',
                click: _ =>{
                    app.quit()                    
                },
                accelerator:'CmdOrCtrl+Q'
            }
            ]
        }        
    ]

    const menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
     })

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

定义快捷方式

Accelerator Documentation: Shortcuts are registered with the globalShortcut module using the register method, i.e.

   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.
     })
   })

所以把你的代码改成这个

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