15. Electron注册全局快捷键

全局快捷键模块就是globalShortcut,意思就是我们打开软件以后,按键盘上的快捷键,就可以实现用快捷键实现特定的功能,相当于用键盘快捷键触发某些事件。

globalShortcut是主进程中的模块,而且注册的都是全局的快捷键,所以你尽量写在main.js中。打开main.js,然后先引入globalShortcut,代码如下:

var  globalShortcut = electron.globalShortcut

引入后,我们现在的需求是按快捷键ctrl+b键后,打开我的博客https://mybj123.com。这时候使用globalShortcut.register方法就可以实现,全部代码如下:

var electron = require('electron'); // 引入 electron 模块

var app = electron.app; // 创建 electron 引用
var globalShortcut = electron.globalShortcut;

var BrowserWindow = electron.BrowserWindow; // 控制窗口引用

var mainWindow = null; // 声明要打开的主窗口

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        width:1000,
        height:600,// 设置打开的窗口大小
        webPreferences: {
            contextIsolation: false,
            worldSafeExecuteJavaScript: false,
            webSecurity: false,
            nodeIntegration: true, // 是否集成 node.js,解决 require is not defined 问题
            nodeIntegrationInWorker: true,
            webviewTag: true, // 解决 webview 无法显示问题
            enableRemoteModule: true
        }
    });
    globalShortcut.register('ctrl+b',() => {
        mainWindow.loadURL('https://mybj123.com');
    });

    require('./main/menu.js');
    mainWindow.loadFile('index6.html'); // 加载 HTML 页面

    // 监听关闭事件,把主窗口设置为 null
    mainWindow.on('closed', () => {
        mainWindow = null;
    })
})

这里需要注意的是,注册全局的快捷键必须在ready事件之后,才能注册成功。

检测快捷键是否注册成功

可以使用globalShortcut.isRegistered()方法,来检测快捷键是否注册成功,因为你可能同时打开很多软件,它们已经占用了一些快捷键的组合,所以并不是你 100%可以注册成功的。

let isRegister= globalShortcut.isRegistered('ctrl+b')?'Register Success':'Register fail'
console.log('------->'+isRegister)

这样就进行了检测,如果你在实际开发中,可能当有冲突时,软件是支持可以修改快捷键。

注销快捷键

因为我们注册的是全局的快捷键,所以当我们关闭软件或者窗口时,记得一定要注销我们的快捷键。防止关闭后打开其他软件和他们的快捷键冲突。

app.on('will-quit',function(){
    //注销全局快捷键的监听
    globalShortcut.unregister('ctrl+b')
    globalShortcut.unregisterAll()

})

为了方便学习,给出全部main.js代码:

var electron = require('electron'); // 引入 electron 模块

var app = electron.app; // 创建 electron 引用
var globalShortcut = electron.globalShortcut;

var BrowserWindow = electron.BrowserWindow; // 控制窗口引用

var mainWindow = null; // 声明要打开的主窗口

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        width:1000,
        height:600,// 设置打开的窗口大小
        webPreferences: {
            contextIsolation: false,
            worldSafeExecuteJavaScript: false,
            webSecurity: false,
            nodeIntegration: true, // 是否集成 node.js,解决 require is not defined 问题
            nodeIntegrationInWorker: true,
            webviewTag: true, // 解决 webview 无法显示问题
            enableRemoteModule: true
        }
    });
    globalShortcut.register('ctrl+e',() => {
        mainWindow.loadURL('https://baidu.com');
    });

    let isRegister = globalShortcut.isRegistered('ctrl+e')?'Register Success' : 'Register fail';
    console.log('------------' + isRegister);

    mainWindow.webContents.openDevTools();
    require('./main/menu.js');
    mainWindow.loadFile('index6.html'); // 加载 HTML 页面

    // BrowserView
    // var BrowserView =electron.BrowserView;
    // var view = new BrowserView();
    // mainWindow.setBrowserView(view);
    // view.setBounds({x:0,y:100,width:1000,height:450});
    // view.webContents.loadURL('https://baidu.com');

    // 监听关闭事件,把主窗口设置为 null
    mainWindow.on('closed', () => {
        mainWindow = null;
    })
})

app.on('will-quit', function () {
    // 注销全局快捷键的监听
    globalShortcut.unregister('ctrl+e');
    globalShortcut.unregisterAll();
})

以上技术笔记就是今天学的主要内容,而且本文的内容在Electron开发中都会用到,希望大家练习一下,工作中用到了也可以回来翻看这篇笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 15. Electron注册全局快捷键

发表回复