是否可以在NodeJS中模拟键盘/鼠标事件?

时间:2012-06-24 14:42:44

标签: javascript node.js console

想象一下,NodeJS模块在从控制台调用时会输出一些介绍性消息,然后等待用户输入(单击enter或esc)。除了 - wait-for-user-input提示之外,这个模块已经拥有并完成了我们需要的一切。所以我们想知道(我个人对NodeJS很新)是否有可能以编程方式执行控制台模块并在其上触发输入事件,这样它就不会等待并立即继续工作?

5 个答案:

答案 0 :(得分:14)

您可以使用RobotJS来实现此目的。

示例代码:

   
var robot = require("robotjs");

// Type user's password or something. 
robot.typeString("abc123");

答案 1 :(得分:7)

正如Jason所说,你可以使用RobotJS进行密钥模拟,但是有几个步骤需要为 Windows paltform正确构建robotJS:

  1. 你需要Windows构建工具,所以运行npm install --global windows-build-tools(需要一些时间,因为它大约120MB)
  2. 运行npm install robotjs --save-dev
    你做完了!。
    如果这是针对电子的应用,那么您还需要以下第3步:
  3. 运行npm rebuild --runtime=electron --target=1.7.9 --disturl=https://atom.io/download/atom-shell --abi=57

    (1.7.9是我的electron --version,abi是我安装的相应node --version 8.7,您可以检查节点版本here的abi版本[查找NODE_MODULE_VERSION列])

答案 2 :(得分:1)

如果您只需要将密钥发送到您的操作系统,

node-key-sender库是RobotJs的替代品。它是跨平台和非常小的lib。

使用npm install --save-dev node-key-sender安装。

并发送"输入"到键盘使用:

var ks = require('node-key-sender');
ks.sendKey('enter');

查看文档页面:https://www.npmjs.com/package/node-key-sender

答案 3 :(得分:1)

响应@Venryx。没错,robotjs会有延迟,特别是如果您必须先加载节点,但是,如果您已经有节点加载器,则值得尝试

robot.setKeyboardDelay(0)

延迟的默认设置为10ms。这极大地帮助了我。

答案 4 :(得分:0)

我已经尝试过robotjsnode-key-sender,但是每个键事件会导致大量的延迟/停顿。 (尤其是在频繁发送时尤其明显)

为解决此问题,我找到了一种使用node-ffi-napi来直接调用Windows user32 SendInput函数的方法:https://stackoverflow.com/a/50412529/2441655

至少就我而言,这实现了更好的性能。 (但是,缺点是它只能在Windows上运行)

相关问题