electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错

这篇具有很好参考价值的文章主要介绍了electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用 electron 开发软件,在设置了 globalShortcut 快捷键后,在当前开发的软件上调用快捷键正常,但是当焦点不在当前软件时,在使用快捷键,好些时候会报错。大概率与系统快捷键产生冲突或者快键键控制的回调里获取的内容,需在软件聚焦时才可获取到。

开始我设置快键键的方式:

function createWindow () {
  // 隐藏窗体顶部菜单
  Menu.setApplicationMenu(null)

  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    width: 1338, // 宽
    height: 839, // 高
    minWidth: 1024,
    minHeight: 600,
    useContentSize: true,
    show: false, // 创建后是否显示
    frame: false, // 添加后自定义标题//自定义边框
    center: true, // 是否出现在屏幕居中的位置
    fullscreenable: platform === 'darwin',
    resizable: false, // 可否缩放
    movable: true, // 可否移动
    maximizable: false,
    minimizable: false,
    title: '当前项目名称', // 默认窗口标题
    transparent: false, // 是否是透明窗口(仅macOS)
    // vibrancy: 'ultra-dark', // 窗口模糊的样式(仅macOS)
    backgroundColor: 'none', // 背景色,用于transparent和frameless窗口
    hasShadow: true, // Boolean (可选) - 窗口是否有阴影. 仅在 macOS 上支持. 默认值为 true
    titleBarStyle: 'hidden',
    webPreferences: {
      nodeIntegration: true,
      webSecurity: false, // electron窗体跨域方案
      backgroundThrottling: false // 当页面被置于非激活窗口的时候是否停止动画和计时器
    }
  })

  mainWindow.setMenu(null) // 隐藏菜单栏
  if (platform === 'darwin') {
    Menu.setApplicationMenu(Menu.buildFromTemplate([]))
  }

  mainWindow.loadURL(winURL)

  mainWindow.on('ready-to-show', function () {
    mainWindow.show() // 初始化后再显示
  })

  mainWindow.on('closed', () => {
    mainWindow = null
  })
}

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('ready', createWindow)

app.on('activate', () => {
  if (mainWindow === null) {
    createWindow()
  }
})

app.whenReady().then(() => {
  // 设置快捷键
  globalShortcut.register('CommandOrControl+Alt+T', () => {
    const currentWindow = BrowserWindow.getFocusedWindow()
    currentWindow.webContents.openDevTools()
  })
})

app.on('will-quit', () => {
  // 注销所有快捷键
  globalShortcut.unregisterAll()
})

但是这样在失去焦点时,windows和mac下都会报错:

electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错,electron,javascript,前端

原因是:const currentWindow = BrowserWindow.getFocusedWindow() 方法需在当前软件聚焦时才可正常调用。

将 const currentWindow = BrowserWindow.getFocusedWindow() 改为 mainWindow.webContents.openDevTools()

// 将 const currentWindow = BrowserWindow.getFocusedWindow() 改为以下代码
mainWindow.webContents.openDevTools()

这种改法在windows下正常,但是mac下关闭程序,程序在Dock中还在,这是使用这种方式依然会报错,这是因为我们没有再mac环境下在程序关闭的时候注销快捷键。所以我们需要再window-all-closed补充上mac环境下的处理。

function createWindow () {
  // 隐藏窗体顶部菜单
  Menu.setApplicationMenu(null)

  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    width: 1338, // 宽
    height: 839, // 高
    minWidth: 1024,
    minHeight: 600,
    useContentSize: true,
    show: false, // 创建后是否显示
    frame: false, // 添加后自定义标题//自定义边框
    center: true, // 是否出现在屏幕居中的位置
    fullscreenable: platform === 'darwin',
    resizable: false, // 可否缩放
    movable: true, // 可否移动
    maximizable: false,
    minimizable: false,
    title: '当前项目名称', // 默认窗口标题
    transparent: false, // 是否是透明窗口(仅macOS)
    // vibrancy: 'ultra-dark', // 窗口模糊的样式(仅macOS)
    backgroundColor: 'none', // 背景色,用于transparent和frameless窗口
    hasShadow: true, // Boolean (可选) - 窗口是否有阴影. 仅在 macOS 上支持. 默认值为 true
    titleBarStyle: 'hidden',
    webPreferences: {
      nodeIntegration: true,
      webSecurity: false, // electron窗体跨域方案
      backgroundThrottling: false // 当页面被置于非激活窗口的时候是否停止动画和计时器
    }
  })

  mainWindow.setMenu(null) // 隐藏菜单栏
  if (platform === 'darwin') {
    Menu.setApplicationMenu(Menu.buildFromTemplate([]))
  }

  mainWindow.loadURL(winURL)

  mainWindow.on('ready-to-show', function () {
    mainWindow.show() // 初始化后再显示

    // 注册快捷键
    globalShortcut.register('CommandOrControl+Alt+T', () => {
      mainWindow.webContents.openDevTools()
    })
  })

  mainWindow.on('closed', () => {
    mainWindow = null
  })
}

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    // windows下调用退出方法
    app.quit()
  } else {
    // mac环境注销所有快捷键
    globalShortcut.unregisterAll()
  }
})

app.on('ready', createWindow)

app.on('activate', () => {
  if (mainWindow === null) {
    createWindow()
  }
})

// 退出程序
app.on('will-quit', () => {
  // windows注销所有快捷键
  globalShortcut.unregisterAll()
})

正确逻辑的核心代码:文章来源地址https://www.toymoban.com/news/detail-680263.html

  mainWindow.on('ready-to-show', function () {
    mainWindow.show() // 初始化后再显示

    // 注册快捷键
    globalShortcut.register('CommandOrControl+Alt+T', () => {
      mainWindow.webContents.openDevTools()
    })
  })

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    // windows下调用退出方法
    app.quit()
  } else {
    // mac环境注销所有快捷键
    globalShortcut.unregisterAll()
  }
})

// 退出程序
app.on('will-quit', () => {
  // windows环境注销所有快捷键
  globalShortcut.unregisterAll()
})

到了这里,关于electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 删除鼠标右击的Open Folder as PyCharm和其他相同情况快捷键

    win+R键,输入 regedit ,进入注册表 直接复制或者自行查找到如下地址 再删除PyCharm Community Edition(或者Pycharm)整个文件夹 ———————————————————————————————————————————— 直接复制或者自行查找到如下地址 再删除PyCharm Comm

    2024年02月09日
    浏览(81)
  • 【MacOS 系列】mac常用快捷键收集,包含提高开发效率、精选快捷键、内置截图快捷键

    Command(或 Cmd)⌘ Shift ⇧ Option(或 Alt)⌥ Control(或 Ctrl)⌃ Caps Lock ⇪ 注意: window和Mac的区别: WIN键即为command键 ctrl即为control键 option即为alt键 只有shift两者是一样的 1、查看隐藏的文件夹 command+shift+. 2、剪切 先 command+C 复制 然后 command+option+v 粘贴 (比复制多了个 option)

    2024年02月12日
    浏览(79)
  • KEIL快捷键+自定义快捷键设置方法

    快捷键 keil专用 快捷键 keil专用 Ctrl + l 删除当前行 tab 将选中内容整体右移 Ctrl + N 新建文件 shift + tab 将选中内容整体左移 Ctrl + O 打开文件 home 光标移到行首 Ctrl + S 保存文件 end 光标移到行末 Ctrl + u 选择内容全变小写 F2 跳转到下一个书签 Ctrl + ←→ 快速横移光标 F5 运行 Ctr

    2024年02月11日
    浏览(47)
  • idea中的快捷键大全, idea常用快捷键

    本文整理idea常用的快捷键大全,由于本人之前用习惯了eclipse开发文件中的快捷键,所以这里有一些快捷键会修改为跟eclipse一样,同样我会在下面说明idea中在哪里去找这个快捷键,这样你可以找到自己的快捷键。 快捷键界面 idea–file–settings—keymap , 默认idea用的是windows模式

    2024年02月08日
    浏览(57)
  • vscode自动换行快捷键(附常用快捷键)

    自动换行:alt+z(标签过长需要拖动编辑器下方滚动条阅读时不太方便,可以一键换行) 1.新建文件:chtr+n 2.新开窗口:ctrl+shift+n 3.分屏:ctrl+1/2/3 4.关闭当前窗口:ctrl+w 5.关闭所有已保存窗口:ctrl+k+w 6.显示/隐藏左侧边栏:ctrl+b 7.文件重命名:鼠标选中+f2 8.自动换行:alt+z(

    2023年04月15日
    浏览(63)
  • Maya常用快捷键有哪些?Maya快捷键大全

    Maya是有名的三维动画制作软件,很多小白学习Maya不知道快捷键,总是一个一个的点击,大大的影响了制作速度,快捷键可以提升制作效率,大家一定要熟记啊!本期内容小编为大家讲解Maya常用快捷键有哪些?感兴趣的小伙伴一起来学习吧。 Maya常用快捷键如下: 低质量显示

    2024年02月12日
    浏览(39)
  • Mac处理系统快捷键与应用快捷键的冲突

    最近使用IDEA时,Mac的快捷键总是跟应用的快捷键冲突了,比如我按下 Command + H ,应用的窗口会缩小,但是我期待的是应用内全局搜索。 本文以此为例讲解解决的方法。 Step1 :首先点击屏幕左上角的苹果图标,选择 “系统偏好设置”: Step2 :点击 “键盘” 选项卡,然后选

    2024年02月07日
    浏览(58)
  • Android Studio常用快捷键、Android Studio快捷键大全

    AndroidStudio 更改变量名 按shift+F6 Ctrl+D: 集合了复制和粘贴两个操作,如果有选中的部分就复制选中的部分,并在选中部分的后面 粘贴出来,如果没有选中的部分,就复制光标所在的行,并在此行的下面粘贴出来。 Ctrl+空格: 输入代码时按此组合键会列出与之相匹配的类、方

    2024年02月08日
    浏览(63)
  • AE剪辑快捷键有哪些?这波快捷键分享拿好了

    AE有哪些快捷键?今天咱就来分享一波AE的快捷键。纯纯的干货,给大家做个分享。 撤回:Ctrl+Z 保存:Ctrl+S 复制:Ctrl+D 裁剪:Ctrl+Shift+D 渲染合成:Ctrl+M 清理内存:Ctrl+Alt+/ 导入素材:Ctrl+I 删除所选图层所有效果:Ctrl+Shift+E 新建纯色图层:Ctrl+Y 新建调整图层:Ctrl+Alt+Y 新建

    2024年02月08日
    浏览(88)
  • Blender 所有常用快捷键速查表:掌握 Blender 键盘快捷键

    Blender 是一款功能强大的开源 3D 和 2D 动画程序或计算机图形软件,任何人都可以免费使用。 无论您是动画师、建模师、VFX 艺术家还是游戏开发者,Blender 都是最佳选择。2000 年,Blender 2.0 推出。 二十年后,Blender 3.0 到来,标志着开源 2D 和 3D 内容创作时代的新篇章。 无论您

    2024年02月08日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包