You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于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。如果要指定单平台,直接写CommandControl即可。
  • 注册结果校验globalShortcut.register会返回布尔值,用来判断快捷键是否注册成功(比如被其他应用占用时会失败)。
  • 注销快捷键:在will-quit事件中调用globalShortcut.unregisterAll(),确保应用退出后不会残留快捷键;如果只想注销单个快捷键,可以用globalShortcut.unregister('快捷键组合')
  • 回调逻辑:你可以把自己的业务逻辑写在每个快捷键的回调函数里,比如触发窗口显示/隐藏、执行特定操作等,我这里用剪贴板做了简单示例,你可以按需替换。

内容的提问来源于stack exchange,提问作者user3162865

火山引擎 最新活动