electron快捷鍵

  • 我們分爲在主進程中註冊快捷鍵和在渲染進程中註冊快捷鍵
  1. 在主進程中我們有兩種方式

一 利用[Menu]來模擬快捷鍵,只有app獲得焦點時才生效,很少使用

const { Menu, MenuItem } = require('electron')
const menu = new Menu()

menu.append(new MenuItem({
  label: 'Print',
  accelerator: 'CmdOrCtrl+P',
  click: () => { console.log('time to print stuff') }
}))

二 就是全局快捷鍵(意思就是不強求app獲得焦點),r所以這就不是模擬菜單事件了,我們要監聽鍵盤,因爲快捷鍵的根本操作就是響應鍵盤的按鍵
我們可以用globalShortcut來實現

  • 引用globalShortcut模塊
const { app, BrowserWindow, ipcMain, globalShortcut } = require('electron');
  • 註冊快捷鍵(在mac10.14 上,客戶端沒有被信任操作音視頻的快捷鍵失效
const ret = globalShortcut.register('CommandOrControl+X', () => {
        console.log('CommandOrControl+X is pressed')
    });  
  • 檢測是否註冊成功
 if (!ret) {
        console.log('registration failed')
    }
// 檢查快捷鍵是否註冊成功
    console.log(globalShortcut.isRegistered('CommandOrControl+X'))
  • 註銷快捷鍵
app.on('will-quit', () => {
    // 註銷快捷鍵
    globalShortcut.unregister('CommandOrControl+X')
  
    // 註銷所有快捷鍵
    globalShortcut.unregisterAll()
  })  

2.在渲染進程中我們也有二種方式
一 可以利用瀏覽窗口監聽鍵盤事件,這是一種常規的方式,自己判斷什麼鍵按下

window.addEventListener('keyup', doSomething, true)

注意第三個參數 true,這意味着當前監聽器總是在其他監聽器之前接收按鍵,以避免其它監聽器調用 stopPropagation()。

二 我們可以利用第三方模塊比如MOUSETRAP

  • 安裝模塊,我們也可以用Script標籤引入

npm install mousetrap --save
  • 使用(我們在html頁面引入index.js文件,文件內容如下)
const Mousetrap = require('mousetrap');

// #region 快捷鍵
// single keys
Mousetrap.bind('esc', () => {
   console.log('escape');
}, 'keyup');
Mousetrap.bind('4', () => {
   console.log('4');
})
Mousetrap.bind("?", () => {
   console.log('show shortcuts!');
});
// combinations
Mousetrap.bind('command+shift+k', () => {
   console.log('command shift k');
});
// map multiple combinations to the same callback
Mousetrap.bind(['command+k', 'ctrl+k'], () => {
   console.log('command k or control k');
   // return false to prevent default browser behavior
   // and stop event from bubbling
   return false;
});

// gmail style sequences
Mousetrap.bind('g i', () => {
   console.log('go to inbox');
});
Mousetrap.bind('* a', () => {
   console.log('select all');
});

// konami code!
Mousetrap.bind('up up down down left right left right b a enter', () => {
   console.log('konami code');
});
// #endregion
  • html文件
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Document</title>
</head>
<body>
   <p>This is test pag!</p>
   <script type="text/javascript" src="./views/js/index.js"></script>
</body>
</html>

開發工作中如果要主進程響應的就用全局快鍵盤,如果是頁面中的快鍵操作,就可以直接用mousetrap。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章