系统快捷键
在应用程序没有键盘焦点时,监听键盘事件。
进程:主进程
globalShortcut 模块可以在操作系统中注册/注销全局快捷键, 以便可以为操作定制各种快捷键。
文档:系统快捷键
使用:
const { app, globalShortcut } = require('electron')
app.whenReady().then(() => {
// Register a 'CommandOrControl+X' shortcut listener.
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()
})
// 渲染进程可以这样使用
const { globalShortcut } = require('electron').remote;
globalShortcut.register('CommandOrControl+Q', () => {
console.log('CommandOrControl+Q is pressed')
})
ipcMain 和 ipcRenderer
ipcMain
从主进程到渲染进程的异步通信。
进程:主进程
ipcMain 是一个 EventEmitter 的实例。 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。 从渲染器进程发送的消息将被发送到该模块。
ipcRenderer
从渲染器进程到主进程的异步通信。
进程: Renderer
ipcRenderer 是一个 EventEmitter 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。
使用:
// index.html
<div>
<h2>进程通信</h2>
<button onclick="sendMsg()">发送给渲染进程</button>
</div>
// main.js
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg)
event.reply('asynchronous-reply', '主进程消息')
})
...
// 主动和渲染进程说话
// setTimeout(() => {
// mainWindow.webContents.send('asynchronous-reply', '主进程主动的消息')
// }, 6000);
// renderer.js
function sendMsg() {
ipcRenderer.send('asynchronous-message', '渲染进程消息')
}
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg)
})