17

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

4

5 回答 5

27

您可以为此使用可能使用RobotJS

示例代码:

var robot = require("robotjs");

// Type user's password or something. 
robot.typeString("abc123");
于 2015-02-05T05:22:07.567 回答
16

正如 Jason 提到的,您可以使用RobotJS进行关键模拟,但需要几个步骤才能正确构建适用于Windows paltform 的robotsJS:

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

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

于 2017-10-23T20:16:47.763 回答
8

如果您只需要将密钥发送到您的操作系统,node-key-sender 库是 RobotJs 的替代品。它是跨平台和非常小的库。

安装它npm install --save-dev node-key-sender

并使用以下命令将“enter”发送到键盘:

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

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

于 2017-03-13T12:55:34.257 回答
3

回复@Venryx。他们是正确的,robotjs 会有延迟,特别是如果你必须先加载节点,但是,如果你已经加载了节点,那么可能值得一试

robot.setKeyboardDelay(0)

延迟的默认设置为 10 毫秒。这对我帮助很大。

于 2020-09-30T00:46:02.803 回答
2

我已经尝试过robotjsand node-key-sender,但它们会导致每个关键事件的大量延迟/卡顿。(经常发送时尤其明显)

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

至少在我的情况下,这实现了更好的性能。(当然,缺点是它只能在 Windows 上运行)

于 2020-09-08T15:44:22.043 回答