基于Electron Quick Start原型,如何注册多个全局快捷键?
在Electron中注册多个全局快捷键的实现方案
嘿,我来帮你搞定在Electron里注册多个全局快捷键的事儿~ 你已经引入了globalShortcut模块,这步很对,接下来咱们只要选对时机、正确调用API就行,话不多说直接上实操:
核心要点
全局快捷键必须在**app完全就绪(ready事件触发)**之后才能注册,而且一定要在应用退出前注销,避免残留占用系统快捷键。
修改后的main.js示例代码
我把你的代码整合并添加了多快捷键注册的逻辑,你可以直接参考:
const electron = require('electron') const app = electron.app const BrowserWindow = electron.BrowserWindow const path = require('path') const url = require('url') const globalShortcut = electron.globalShortcut const { clipboard } = require('electron') // 保持对窗口对象的全局引用,避免JavaScript对象被垃圾回收时窗口自动关闭 let mainWindow function createWindow () { // 创建浏览器窗口 mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') } }) // 加载应用的index.html mainWindow.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), protocol: 'file:', slashes: true })) // 打开开发者工具(按需启用) // mainWindow.webContents.openDevTools() // 当窗口关闭时触发 mainWindow.on('closed', function () { // 取消引用窗口对象,如果你的应用支持多窗口,通常会把窗口对象存放在数组里,这里则应该删除相应元素 mainWindow = null }) } // Electron初始化完成并准备创建浏览器窗口时调用这个方法 app.on('ready', () => { createWindow() // --- 这里开始注册多个全局快捷键 --- // 快捷键1:Ctrl/Command + Shift + C,打印当前剪贴板内容到控制台 const shortcut1 = globalShortcut.register('CommandOrControl+Shift+C', () => { const clipboardContent = clipboard.readText() console.log('当前剪贴板文本内容:', clipboardContent) }) if (!shortcut1) { console.log('快捷键1注册失败!') } // 快捷键2:Ctrl/Command + Shift + V,将指定文本写入剪贴板 const shortcut2 = globalShortcut.register('CommandOrControl+Shift+V', () => { clipboard.writeText('这是通过全局快捷键写入的剪贴板内容') console.log('已向剪贴板写入内容') }) if (!shortcut2) { console.log('快捷键2注册失败!') } // 验证所有注册的快捷键 console.log('已注册的全局快捷键:', globalShortcut.getAll()) }) // 当所有窗口关闭时退出应用 app.on('window-all-closed', function () { // 在macOS上,除非用户用Cmd+Q确定退出,否则大部分应用及其菜单栏会保持激活 if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', function () { // 在macOS上,当点击dock图标且没有其他窗口打开时,通常会重新创建一个窗口 if (mainWindow === null) { createWindow() } }) // --- 应用退出前注销所有全局快捷键 --- app.on('will-quit', () => { // 注销所有注册的快捷键 globalShortcut.unregisterAll() })
关键细节说明
- 快捷键组合格式:用
CommandOrControl可以同时兼容macOS(Command键)和Windows/Linux(Control键),比如CommandOrControl+Shift+C。如果要指定单平台,直接写Command或Control即可。 - 注册结果校验:
globalShortcut.register会返回布尔值,用来判断快捷键是否注册成功(比如被其他应用占用时会失败)。 - 注销快捷键:在
will-quit事件中调用globalShortcut.unregisterAll(),确保应用退出后不会残留快捷键;如果只想注销单个快捷键,可以用globalShortcut.unregister('快捷键组合')。 - 回调逻辑:你可以把自己的业务逻辑写在每个快捷键的回调函数里,比如触发窗口显示/隐藏、执行特定操作等,我这里用剪贴板做了简单示例,你可以按需替换。
内容的提问来源于stack exchange,提问作者user3162865




