Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js JavaScript:在服务器上模拟按键(类似于宏)_Javascript_Node.js_Irc - Fatal编程技术网

Node.js JavaScript:在服务器上模拟按键(类似于宏)

Node.js JavaScript:在服务器上模拟按键(类似于宏),javascript,node.js,irc,Javascript,Node.js,Irc,我正在尝试使用node.js脚本来模拟按键,例如向上箭头或a按钮。具体地说,我正在尝试复制。基本上,每当通过IRC发送上、下、左、右、a、b、选择、启动命令时,服务器都会模拟按键,而按键又反过来控制gameboy仿真器。到目前为止,我已经使用node.js的IRC模块编写了以下内容: var config = { channels: ["#tron"], server: "irc.freenode.net", botName: "wyatt" }; var irc =

我正在尝试使用node.js脚本来模拟按键,例如向上箭头或a按钮。具体地说,我正在尝试复制。基本上,每当通过IRC发送上、下、左、右、a、b、选择、启动命令时,服务器都会模拟按键,而按键又反过来控制gameboy仿真器。到目前为止,我已经使用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);
});
要运行脚本,我在命令提示符中键入node scriptName.js。我正在使用Windows7

这连接到freenode通道tron,我正在使用它进行测试,因为它似乎主要处于休眠状态

当用户输入一个已接受的命令时,它会发送一条消息,如NIMAID sent the LEFT command!,否则它会发送NIMAID,这不是有效的命令!。事实上,它工作得完美无缺。所以我需要做的就是找到一种发送按键的方法,最后的脚本就是一个switch语句

问题是,我通过搜索互联网找到的任何参考文献都谈到在浏览器环境中使用node.js,使用JQuery或类似的工具。我需要将按键发送到模拟器

tldr:我需要将node.js脚本中的按键发送到运行在Windows7服务器桌面上的应用程序


有什么方法可以做到这一点吗?

显然,npm注册表中有一个模块,有人编写该模块来控制Windows中的键盘。您可以运行npm安装win_键盘并使用它;它似乎完全符合您的要求。

我也制作了一个节点模块来实现这一点:


您可以尝试RobotJS的替代方案。它是一个非常小的跨平台库,用于将密钥发送到操作系统,称为节点密钥发送器。我是在对RobotJS和kbm robot感到失望后开发的

使用npm安装-保存开发节点密钥发送器安装它

并使用以下命令向键盘发送文本:

var ks = require('node-key-sender');
ks.sendText('This is my text');

查看文档页面:。

您的目标运行环境和模拟器是什么?在浏览器之外,密钥处理是非常特定于平台的。正如我所说,我使用的是Windows7 Professional 64计算机。我希望能够做一些事情,如发送键到特定的窗口。这样,只要按键到达窗口,我运行的模拟器就不重要了。如果真的归结到这一点,我计划使用Visualboy Advance。对于windows,我使用node的exec函数来运行调用pywin32键盘事件的python脚本。对于linux,您可以使用xdotool。我称之为的文件。我也在使用这个程序。谢谢你,这个看起来绝对完美!我不知道我怎么没找到它。然而,每当我尝试做var-keyboard=requirewin\u-keyboard;我明白了。我真的不明白这意味着什么,除了win_键盘库不起作用之外。有什么帮助吗?您需要运行32位版本的Node:64位版本无法调用32位扩展。如果你真的想要一个64位版本,试着给作者发电子邮件,让他们发布模块的源代码:好的,我安装32位版本。当我尝试执行var-keyboard=requirewin\u-keyboard;,它告诉我它找不到win_键盘节点。所以,我再次安装了npm win_键盘,看起来它已经安装好了。然而,当我检查我的node_modules文件夹时,你瞧,它实际上删除了win_键盘文件夹!当我将.node文件复制到脚本目录中并执行var keyboard=require./win_keyboard;,它仍然没有找到它!这正变成一系列越来越乏味的问题,但有人能再帮我一次吗该链接现在已断开。我试图在Ubuntu 16中使用该链接,但出现了一个错误。stopJar不工作。因此,每次启动应用程序时,都会执行一个新的jar并将其保存在后台。初始化几次后,操作系统开始挂起,然后完全冻结。
var ks = require('node-key-sender');
ks.sendText('This is my text');