我正在尝试使用node.js脚本来模拟按键,例如向上箭头或按钮。具体来说,我正在尝试复制Twitch Plays Pokemon。基本上,每当通过IRC发送命令(向上,向下,向左,向右,a,b,选择,开始)时,服务器模拟按键,按键控制游戏模拟器。到目前为止,我已经用node.js的IRC模块编写了这个:
var config = {
channels: ["#tron"],
server: "irc.freenode.net",
botName: "wyatt"
};
var irc = require("irc");
var bot = new irc.Client(config.server, config.botName, {
channels: config.channels
});
var commandHandler = function(from, text) {
if(text.toLowerCase() === "up"||text.toLowerCase() === "down"||text.toLowerCase() === "left"||text.toLowerCase() === "right"||text.toLowerCase() === "a"||text.toLowerCase() === "b"||text.toLowerCase() === "select"||text.toLowerCase() === "start") {
bot.say(config.channels[0], from.toUpperCase() + " sent the " + text.toUpperCase() + " command!");
} else {
bot.say(config.channels[0], from.toUpperCase() + ", that wasn't a valid command!");
}
};
bot.addListener("message", function(from, to, text, message) {
commandHandler(from, text);
});
要运行我的脚本,我将节点scriptName.js键入命令提示符。我使用的是Windows 7。
这连接到 freenode 频道 #tron ,我将其用于测试目的,因为它似乎主要处于休眠状态。
当用户输入一个接受的命令时,它会发送一条消息,如“NIMAID发送LEFT命令!”,否则它会发送“NIMAID,这不是一个有效的命令!”。事实上,它完美无瑕。所以我需要做的就是找到一种发送按键的方法,最后的脚本只是一个switch语句。
麻烦的是,我可以通过搜索互联网找到的任何参考文献都谈到在浏览器环境中使用node.js,使用JQuery或类似的东西。我需要将按键发送到模拟器。
tldr:我需要将node.js脚本中的按键发送到在Windows 7服务器桌面上运行的应用程序。
有没有办法做到这一点?
答案 0 :(得分:9)
我一直在开发一个跨平台的Node.js模块,它很棒!到目前为止,您可以发送击键,键入字符串,移动鼠标并单击,然后获取像素的颜色。
答案 1 :(得分:3)
对于windows - 我使用node的exec函数来运行调用pywin32键盘事件的python脚本。对于linux,您可以使用xdotool。
答案 2 :(得分:3)
我也创建了一个节点模块: https://github.com/kylepaulsen/kbm-robot
var robot = require("kbm-robot");
robot.startJar();
robot.press("alt")
.press("tab")
.sleep(100)
.release("tab")
.release("alt")
.sleep(100)
.typeString("Hello World!")
.go()
.then(robot.stopJar);
答案 3 :(得分:2)
显然,npm注册表中有一个win_keyboard模块,有人写这个模块来控制Windows中的键盘。您可以运行npm install win_keyboard
并使用它;它似乎完全符合你的要求。
答案 4 :(得分:1)
你可以尝试替代RobotJS。它是一个非常小且仍然跨平台的库,可以将密钥发送到您的操作系统,称为node-key-sender。我在对RobotJS和kbm-robot感到沮丧之后开发了。
使用npm install --save-dev node-key-sender
安装。
使用以下方法将文本发送到键盘:
var ks = require('node-key-sender');
ks.sendText('This is my text');