【问题标题】:Electron/React: How to use IPC to run Global Shortcut uninterruptedElectron/React:如何使用 IPC 不间断地运行 Global Shortcut
【发布时间】:2021-08-05 15:53:22
【问题描述】:

在 Electron 的世界里还很新,但我想为自己做一个小应用程序。

我的应用程序的要点如下:因为我在许多不同的应用程序中工作,所以当我有一段时间没有涉足上述应用程序时,经常会忘记更复杂的快捷方式。所以,我想制作一个 Electron 应用程序,它向我显示一堆图标,我可以在触摸显示器上按下这些图标,然后为我执行命令。有点像虚拟直播平台。

到目前为止,我的应用程序使用 Electron、Webpack 和 React 运行,并且我设法在 React 和 Main.js 部分之间建立了有效的 IPC 连接。

/* React App.js */
const handleHotKeyClick = (hotkey: string) =>{
  ipcRenderer.send(CATCH_ON_MAIN, hotkey);
 }

在 Main.js 中,我尝试直接从 ipcMain 中触发 globalShortcut,如下所示:

ipcMain.on(CATCH_ON_MAIN, (event, arg) => {
     console.log('Incoming command', arg);
     globalShortcut.register(arg, () => {
        console.log('ipc pressed!')
     })
 });

这不起作用。似乎 globalShortcut 仅适用于 App.ready。

那么,如何使用我在此处设置的 ipc 通信设置这样的全局快捷方式。 其次,我注意到如果我在 App.Ready 中对 shorthut 处理程序进行硬编码,它会捕获它,但不会继续执行命令应该执行的操作。它可以防止默认行为。有没有办法解决这个问题?

非常感谢!

【问题讨论】:

    标签: reactjs electron ipc


    【解决方案1】:

    为什么每次执行CATCH_ON_MAIN回调时都注册一个回调globalShortcut.register?此外,它只会注册回调,不会运行回调。理想情况下,您应该只注册一次回调

    如果您想在按下任何键盘快捷键时在主进程中执行回调,那么您可以在main进程中编写如下,而无需在renderer进程中编写任何内容。参考here

    app.whenReady().then(() => {
      // Register a 'Control+X' shortcut listener.
      const ret = globalShortcut.register('Control+X', () => {
        console.log('Control+X is pressed');
      });
    
      if (!ret) {
        console.log('registration failed');
      }
    
      // Check whether a shortcut is registered.
      console.log(globalShortcut.isRegistered('Control+X'));
    });
    

    如果您想在按下任何按钮时在主进程中执行回调。然后写如下。

    //in renderer process,
    const handleHotKeyClick = (hotkey: string) =>{
      ipcRenderer.send(CATCH_ON_MAIN, hotkey);
     }
    

    //in main process
    ipcMain.on(CATCH_ON_MAIN, (event, arg) => {
         console.log('Incoming command', arg);
     });
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2022-08-05
      • 2015-04-25
      • 1970-01-01
      • 2021-09-13
      • 2021-10-02
      • 2020-04-03
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多