You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Electron.js应用中实现全局键盘事件监听?

解决Electron全局按键监听问题

修复node-global-key-listener仅生效一次的问题

如果你的监听器只触发一次,大概率是代码逻辑或实例生命周期问题,比如实例被垃圾回收、监听逻辑仅执行一次,或误调用了移除监听的方法。正确的持续监听写法如下(建议放在Electron主进程中):

const { GlobalKeyboardListener } = require('node-global-key-listener');
const { app } = require('electron');

// 确保实例为全局变量,避免被垃圾回收
const keyboardListener = new GlobalKeyboardListener();

// 添加持续监听的回调
keyboardListener.addListener((event, isDown) => {
  // 区分按键按下/抬起事件
  if (isDown) {
    console.log(`按键 ${event.name} 按下,键码: ${event.vkCode}`);
    // 在这里编写你的业务逻辑
  } else {
    console.log(`按键 ${event.name} 抬起`);
  }
});

// 应用退出时销毁监听,释放系统资源
app.on('will-quit', () => {
  keyboardListener.removeAllListeners();
});

如果问题依旧,尝试重置依赖:

rm -rf node_modules package-lock.json
npm install

更稳定的替代方案:iohook(优化安装流程)

iohook安装的繁琐主要来自本地编译,可通过预编译包跳过这一步:

  1. 安装预编译版本的iohook:
npm install iohook-prebuilds
  1. 在Electron主进程中使用:
const ioHook = require('iohook-prebuilds');
const { app } = require('electron');

// 监听按键按下事件
ioHook.on('keydown', (keyEvent) => {
  console.log(`按键码: ${keyEvent.keycode}, 原始码: ${keyEvent.rawcode}`);
  // 自定义业务逻辑
});

// 启动监听
ioHook.start();

// 应用退出时停止监听
app.on('before-quit', () => {
  ioHook.stop();
});

若需针对特定Electron版本安装,可指定编译参数:

npm install iohook --runtime=electron --target=你的Electron版本号 --disturl=https://atom.io/download/electron

注意事项

  • 全局按键监听必须放在Electron主进程中,渲染进程的监听可能因页面刷新、挂起等问题失效。
  • 所有键盘监听库都需要系统级权限,Windows/macOS/Linux上需授权应用的输入监控权限。

内容的提问来源于stack exchange,提问作者Z H.KHAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:22:22