2014-02-18 25 views
4

我想獲得一個node.js腳本來模擬按鍵,如向上的箭頭或一個按鈕。具體而言,我試圖做一個克隆Twitch Plays Pokemon。基本上,只要通過IRC發送一條命令(上,下,左,右,a,b,select,start),服務器就會模擬一個按鍵,然後控制一個gameboy模擬器。到目前爲止,我寫了這個與IRC模塊的node.js:Node.js JavaScript:仿真服務器上的按鍵(像宏)

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

你定位的是什麼運行環境和模擬器?在瀏覽器世界之外,密鑰處理是*非常*平臺特定的。 –

+0

正如我所說的,我正在使用Windows 7 Professional 64計算機。我希望能夠做一些像sendkey一樣的特定窗口。這樣,只要按鍵到達窗口,我所運行的模擬器就無關緊要。如果它真的歸結於它,我打算使用Visualboy Advance。 – Nimaid

回答

2

顯然,在npm註冊表中有一個win_keyboard模塊,有人在Windows中編寫了這個模塊來控制鍵盤。你可以運行npm install win_keyboard並使用它;它看起來完全是你想要的。

+0

謝謝,這看起來絕對完美!我不知道我怎麼沒有找到它。然而,每當我嘗試做'var keyboard = require(「win_keyboard」);'我得到[http://pastebin.com/sNFViRj5](http://pastebin.com/sNFViRj5)。我真的不明白這是什麼意思,除了win_keyboard庫不工作。有什麼幫助嗎? – Nimaid

+0

您需要運行32位版本的節點:64位版本無法調用到32位擴展。 ([源](http://stackoverflow.com/questions/13035760/node-js-native-module-is-not-a-valid-win32-application-error)) –

+0

如果你真的想要一個64位版本,請嘗試給作者發電子郵件並要求他們發佈模塊的源代碼:https://github.com/junku901 –

3

對於windows - 我使用node的exec函數來運行調用pywin32的鍵盤事件的python腳本。對於Linux,你可以使用xdotool。

Here's我調用它的文件。該程序也使用node

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); 
+0

我試圖在Ubuntu 16中使用這個鏈接,並且存在一個錯誤。 stopJar()不起作用。所以,每次應用程序啓動時,都會執行一個新的jar並保留在後臺。初始化幾次後,操作系統開始掛起,然後完全凍結。 – computeiro

9

我一直工作在一個跨平臺的模塊Node.js加載和它一起很大的到來!到目前爲止,您可以發送擊鍵,鍵入字符串,移動鼠標並單擊,並獲取像素的顏色。

https://github.com/octalmage/robotjs

1

你可以嘗試RobotJS替代。它是一個非常小且仍然跨平臺的庫,可將密鑰發送到稱爲節點密鑰發送方的操作系統。在RobotJS和kbm-robot感到沮喪之後,我開發了它。

npm install --save-dev node-key-sender安裝。

和發送文本使用鍵盤:

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

退房的文檔頁面:https://www.npmjs.com/package/node-key-sender