首页 > 解决方案 > 我可以在我的电子应用程序中使用两个 ioHook 事件吗?

问题描述

我正在使用 iohook 节点库来监听全局鼠标和键盘事件。

对于我正在使用的一些逻辑,我实际上需要两个库实例。现在我的代码看起来像这样

const ioHook = require('iohook');
const ioHook2 = require('iohook');
ioHook.start();
ioHook.on('mouseclick', this.onMouseActivity);
ioHook2.start();
ioHook2.on('mouseclick', this.onMouseActivity2);

现在,在执行了一些逻辑之后,我需要停止第一个监听器。所以,我执行以下代码,

ioHook2.stop();

但是,这使我所有的钩子都停止了。我的预期结果是第一个 ioHook 不应该关闭和工作。

这是因为两者使用的事件发射器是相同的吗?像mouseclick,,keypress等等mousemove。?

如果是这样,我可以删除特定于 ioHook Instance 的特定侦听器吗?

谢谢您的帮助。这让我烦恼了好几个小时。

标签: javascriptnode.jselectroneventemitter

解决方案


没有第一个和第二个,只有一个钩子对象。CommonJS 模块被评估一次,所以ioHook === ioHook2.

start开始监听注册的钩子并stop停止监听它们。

由于iohook是事件发射器,因此可以在需要时像任何其他事件发射器一样取消订阅侦听器:

ioHook.on('mouseclick', onMouseActivity);

...

ioHook.off('mouseclick', onMouseActivity);

推荐阅读