22

我没有使用 Node 作为服务器;我将它用于 CLI 应用程序。这个虽然需要在后台运行并监听全局按键事件(没有焦点)。

我在 Node.js 中看不到任何明显的方法。我有哪些选择?

4

4 回答 4

16

看起来您需要所有键盘事件的全局挂钩。
你可以试试iohook模块。使用非常简单:

const ioHook = require('iohook');
ioHook.on("keypress", event => {
  console.log(event);
  // {keychar: 'f', keycode: 19, rawcode: 15, type: 'keypress'}
});
ioHook.start();
于 2017-01-03T10:54:41.550 回答
3

我只是用iohook来做。你可以做这样的事情......

const ioHook = require('./node_modules/iohook-master/index.js');

ioHook.on("keyup",function(keyPress){
    if(keyPress.keycode == CTRLIZQ){
        //do something
    }
});

ioHook.start();
于 2017-07-25T22:40:58.647 回答
2

似乎守护程序按键的组合可以满足您的需求。我只在节点脚本中使用过按键,而不是守护进程,所以我不知道它是否会以同样的方式工作。但它可能!在最糟糕的情况下,您会发现一种解决方案无法解决您的问题。

于 2015-02-21T15:20:25.967 回答
0

keypress在上面的评论中说使用,但是看到 lib 已经 8 岁并且被遗弃了,有人写了以下内容作为 lib 的替换,它只是做同样的事情,但它是 nodejs 内部依赖项。

let readline = require('readline');

readline.emitKeypressEvents(process.stdin);

process.stdin.on('keypress', (ch, key) => {
  console.log('got "keypress"', ch, key);
  if (key && key.ctrl && key.name == 'c') {
    console.log('ctrl+c was pressed');
    // do something usefull
  }
});

process.stdin.setRawMode(true);
process.stdin.resume();
于 2021-10-29T06:37:03.843 回答