electron 不保留键的电子全局快捷方式替代方案

roqulrg3  于 2022-12-16  发布在  Electron
关注(0)|答案(1)|浏览(186)

我怎样才能在没有全局快捷键的情况下在电子中捕获按键,而不失去按键功能。例如,我想捕获Tab键,但不失去它的缩进能力,例如在Visual Studio代码中。
我使用电子13.0,因为如果我使用更高的一些所需的模块不工作。
我试过iohook但是抛出了iohook。node模块没有找到。我想它还没有支持Electron 13。
有人知道我该怎么做吗?谢谢!

odopli94

odopli941#

当涉及到窗口和主进程之间的通信时,电子可能会有点令人头痛,这是有充分理由的:安全
但是,这个问题有两种解决方案:
1.不推荐:index.html中{ nodeIntegration: true }window.electron所需的plainipcRenderer,这可能会导致很多麻烦,请不要这样做,您将所有nodejs函数的访问权限给予用户,如fs、child_process ...
1.建议:preload. Preload在进程和窗口之间架起了桥梁,允许您选择要与窗口共享的内容,在本例中,是没有整个电子访问权限的ipcRenderer。
点击此处了解更多关于Electronic security的信息
首先,创建一个preload.js,将作用域隔离的ipcRenderer.send函数传递给窗口

// preload.js
const { contextBridge, ipcRenderer } = require('electron');

const exposedAPI = {
  sendMessage: (message) => {
    ipcRenderer.send('my-event', string);
  }
};

contextBridge.exposeInMainWorld("electron", exposedAPI);

关于contextBridge here的更多信息
在主电子脚本中

// main.js
const { ipcRenderer } = require('electron');

...

const window = new BrowserWindow({
    ...
    preload: 'my/preload/path/preload.js', // Here preload is loaded when the window is created
})

...

ipcRenderer.on('my-event', (string) => {
     // do struff with string
});


完整的here示例
最后,您希望从中捕获事件而不更改行为的窗口

// index.html or your-script.js
document.addEventListener('keydown', (evt) => { // keyup, keydown or keypress
    window.electron.exposedAPI.sendMessage('key was pressed');
});

相关问题