【发布时间】:2012-06-26 01:28:25
【问题描述】:
想象一下,当从控制台调用 NodeJS 模块时,会输出一些介绍性消息,然后等待用户输入(单击 enter 或 esc)。这个模块已经拥有并完成了我们需要的一切,除了 - 等待用户输入提示。所以我们想知道(我个人对 NodeJS 很陌生)是否可以以编程方式执行控制台模块并在其上触发输入事件,这样它就不会等待并立即继续工作?
【问题讨论】:
标签: javascript node.js console
想象一下,当从控制台调用 NodeJS 模块时,会输出一些介绍性消息,然后等待用户输入(单击 enter 或 esc)。这个模块已经拥有并完成了我们需要的一切,除了 - 等待用户输入提示。所以我们想知道(我个人对 NodeJS 很陌生)是否可以以编程方式执行控制台模块并在其上触发输入事件,这样它就不会等待并立即继续工作?
【问题讨论】:
标签: javascript node.js console
您可以为此使用RobotJS。
示例代码:
var robot = require("robotjs");
// Type user's password or something.
robot.typeString("abc123");
【讨论】:
robot.keyTap('enter')成功按下回车键。
正如 Jason 提到的,您可以使用 RobotJS 进行键模拟,但需要几个步骤才能正确构建 Windows paltform 的 robotsJS:
npm install --global windows-build-tools(需要一些时间,因为它大约 120MB)npm install robotjs --save-dev运行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,您可以查看abi 版本的节点版本here [查找NODE_MODULE_VERSION 列])
【讨论】:
--save-dev 而不是--save?
devDependencies)如果包是从 NPM 安装的,则不会安装。
node-key-sender 库是 RobotJs 的替代方案,如果您只需要将密钥发送到您的操作系统。它是跨平台且非常小的库。
使用npm install --save-dev node-key-sender 安装它。
然后使用以下命令向键盘发送“enter”:
var ks = require('node-key-sender');
ks.sendKey('enter');
【讨论】:
--save-dev 而不是--save?
我尝试过robotjs 和node-key-sender,但它们会导致每个按键事件出现大量延迟/卡顿。 (在频繁发送时尤其明显)
为了解决这个问题,我找到了一种使用node-ffi-napi 直接调用Windows user32 SendInput 函数的方法:https://stackoverflow.com/a/50412529/2441655
至少在我的情况下,这实现了更好的性能。 (当然,缺点是它只能在 Windows 上运行)
【讨论】:
回复@Venryx。他们是对的,robotjs 会有延迟,特别是如果您必须先加载节点,但是,如果您已经加载了节点,则可能值得尝试
robot.setKeyboardDelay(0)
延迟的默认设置是 10 毫秒。这对我帮助很大。
【讨论】: