我不是将Node用作服务器;我将其用于CLI应用程序。然而,这个应用程序需要在后台运行并监听全局按键事件(即使没有焦点)。
我没有看到在Node中明显的方法来实现这一点。那么我的选择是什么?
我不是将Node用作服务器;我将其用于CLI应用程序。然而,这个应用程序需要在后台运行并监听全局按键事件(即使没有焦点)。
我没有看到在Node中明显的方法来实现这一点。那么我的选择是什么?
看起来你需要捕获所有键盘事件的全局钩子。
你可以尝试使用 iohook 模块。使用方法非常简单:
const ioHook = require('iohook');
ioHook.on("keypress", event => {
console.log(event);
// {keychar: 'f', keycode: 19, rawcode: 15, type: 'keypress'}
});
ioHook.start();
我只是用iohook来完成这个任务。你可以像这样做...
const ioHook = require('./node_modules/iohook-master/index.js');
ioHook.on("keyup",function(keyPress){
if(keyPress.keycode == CTRLIZQ){
//do something
}
});
ioHook.start();
我之前在评论中说要使用keypress
,但是看到这个库已经8年没有更新了,而且被放弃了,有人写了一个替代该库的东西,它完全做同样的事情,而且它是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();
我尝试了ioHook,但它没有工作,我猜是因为Mac M1芯片的原因。
我找到了另一个包,它按预期工作:https://www.npmjs.com/package/gkm
我还发现了一个简单的应用程序,可以在终端上运行:https://github.com/KleoPetroff/node-global-key-listener
gkm 在 Linux 上运行
https://www.npmjs.com/package/gkm
const gkm = require('gkm');
gkm.events.on('key.*', data => {
const button = data[0];
if (button === 'Escape') {
console.log('Escaped');
process.exit();
}
});