2014-02-18 2 views
4

keypress (예 : 위쪽 화살표 또는 a 단추)를 시뮬레이트하기 위해 node.js 스크립트를 가져 오려고합니다. 특히 Twitch Plays Pokemon의 클론을 만들려고합니다. 기본적으로 IRC를 통해 명령 (위, 아래, 왼쪽, 오른쪽, a, b, 선택, 시작)이 전송 될 때마다 서버가 키 누르기를 시뮬레이트하여 게임 보이 에뮬레이터를 제어합니다. 지금까지 내가 Node.js를위한 IRC 모듈이 작성했습니다 :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를 입력합니다. 나는 윈도우 7

는 주로 휴면 것으로 보인다 이것은, 내가 테스트 목적으로 사용하고있는 Freenode의 채널 #tron에 연결을 사용하고 있습니다.

사용자가 승인 된 명령 중 하나를 입력하면 "NIMAID가 LEFT 명령을 보냈습니다!"와 같은 메시지를 보내고, 그렇지 않으면 "NIMAID, 유효한 명령이 아닙니다!"라는 메시지를 보냅니다. 그것은 그대로, 그것은 완벽하게 작동합니다. 그래서 제가해야 할 일은 키 누르기를 보내는 방법을 찾는 것입니다. 마지막 스크립트는 스위치 선언문 일뿐입니다.

문제는 JQuery 나 이와 비슷한 브라우저 환경에서 node.js를 사용하는 것에 대해 인터넷 검색을 통해 찾을 수있는 참조 사항이 있다는 것입니다. 에뮬레이터에 keypresses를 보내야합니다.

tldr : keypresses를 node.js 스크립트에서 Windows 7 서버 데스크탑에서 실행되는 응용 프로그램으로 전송해야합니다.

이렇게 할 방법이 있습니까?

+0

어떤 실행 환경과 에뮬레이터를 타겟팅합니까? 브라우저 세계 밖에서는 키 처리가 플랫폼 별입니다. –

+0

제가 말했듯이 저는 Windows 7 Professional 64 컴퓨터를 사용하고 있습니다. 나는 특정 윈도우로 sendkeys 같은 것을 할 수 있기를 바라고있다. 그렇게하면 키를 눌러 창에 도착하는 한 내가 실행중인 에뮬레이터가 문제가되지 않습니다. 정말 문제가된다면 Visualboy Advance를 사용할 계획입니다. – Nimaid

답변

2

분명히 누군가가 Windows에서 키보드를 제어하기 위해 작성한 npm 레지스트리에 win_keyboard 모듈이 있습니다. 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 용 - 나는 pywin32의 키보드 이벤트를 호출하는 python 스크립트를 실행하기 위해 노드의 exec 함수를 사용했습니다. 리눅스의 경우 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

우분투 16에서 이것을 사용하려고했는데 버그가 있습니다. stopJar()가 작동하지 않습니다. 따라서 응용 프로그램이 시작될 때마다 새 항아리가 실행되고 백그라운드에서 유지됩니다. 몇 번 초기화 한 후에 운영 시스템이 멈추고 나중에 완전히 정지합니다. – 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를.