想象一下,当从控制台调用 NodeJS 模块时,会输出一些介绍性消息,然后等待用户输入(单击 enter 或 esc)。这个模块已经拥有并完成了我们需要的一切,除了 - 等待用户输入提示。所以我们想知道(我个人对 NodeJS 非常陌生)是否可以以编程方式执行控制台模块并在其上触发输入事件,以便它不会等待并立即继续工作?
5 回答
您可以为此使用可能使用RobotJS。
示例代码:
var robot = require("robotjs");
// Type user's password or something.
robot.typeString("abc123");
正如 Jason 提到的,您可以使用RobotJS进行关键模拟,但需要几个步骤才能正确构建适用于Windows paltform 的robotsJS:
- 您需要 Windows 构建工具才能运行
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 是我安装的相应8.7,您可以在此处node --version
查看节点版本的 abi 版本[查找 NODE_MODULE_VERSION 列])
如果您只需要将密钥发送到您的操作系统,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 。
回复@Venryx。他们是正确的,robotjs 会有延迟,特别是如果你必须先加载节点,但是,如果你已经加载了节点,那么可能值得一试
robot.setKeyboardDelay(0)
延迟的默认设置为 10 毫秒。这对我帮助很大。
我已经尝试过robotjs
and node-key-sender
,但它们会导致每个关键事件的大量延迟/卡顿。(经常发送时尤其明显)
为了解决这个问题,我找到了一种直接node-ffi-napi
调用 Windows user32SendInput
函数的方法:https ://stackoverflow.com/a/50412529/2441655
至少在我的情况下,这实现了更好的性能。(当然,缺点是它只能在 Windows 上运行)