【问题标题】:How can I stop Electron from "occupying" global keyboard shortcuts?如何阻止 Electron “占用”全局键盘快捷键?
【发布时间】:2019-07-26 07:13:10
【问题描述】:

我正在构建一个小型音乐播放器。与任何其他播放器一样,即使应用没有焦点,您也可以使用键盘媒体键(上一曲、下一曲、播放、暂停)来控制它。


但是,当我注册这些快捷方式以便 Electron 可以监听它们时,其他应用程序无法使用它们。如果我的应用程序正在运行,例如。 G。当按下这些键中的任何一个时,Spotify 或 Window's Groove 不会做任何事情,因为我的应用程序已经占用了这些键。

我正在注册这样的快捷方式:

app.on('ready', () => {
    globalShortcut.register('MediaPlayPause', () => {
      window.webContents.send('shortcut', 'MediaPlayPause');
    });

    globalShortcut.register('MediaNextTrack', () => {
      window.webContents.send('shortcut', 'MediaNextTrack');
    });

    globalShortcut.register('MediaPreviousTrack', () => {
      window.webContents.send('shortcut', 'MediaPreviousTrack');
    });
  }
});

所以我的问题是:是否可以在其他应用请求它们时释放这些快捷方式?

如果是,是否可以在其他应用不再需要这些快捷方式时重新注册这些快捷方式? (假设其他应用在不再需要时取消注册快捷方式)

【问题讨论】:

    标签: javascript electron


    【解决方案1】:

    恐怕如果不使用任何特定于操作系统的本机东西,这在 Electron 之外是不可能的。理论上,您可以在相应的函数上应用一个系统范围的钩子来注册快捷方式并解决这个问题。另一种选择是低级键盘挂钩,因为这样您根本不必注册“官方”侦听器。

    除此之外,我看不出这怎么可能。引用 globalShortcut 文档:

    这种行为是操作系统有意为之,因为它们不希望应用程序争夺全局快捷方式。

    下面是基于 Windows 的系统的解决方案:https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms644985(v%3Dvs.85) 使用带有 WH_KEYBOARD_LL 标志的 SetWindowsHookEx。

    因此,总而言之,最好的办法是找到一种根本不使用 globalShortcut API 而是以特定于操作系统的方式实现自己的侦听器的方法(可能是低级键盘挂钩)。

    【讨论】:

    • 嗯,不是一个非常令人满意的答案,但我已经认为它不会以简单的方式工作。还是谢谢!
    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多