2009-09-18 7 views
8

Esiste un modo operativo neutro per Ruby per inviare eventi di tastiera e mouse al sistema operativo sottostante?Come inviare comandi da tastiera e mouse al sistema operativo sottostante usando Ruby?

Un approccio ovvio (per me) è quello di utilizzare i binding Ruby/Java e utilizzare java.awt.Robot, ma sembra solo sciocco.

+0

Quale sistema operativo? Ogni piattaforma ha i propri binding Ruby. – tadman

+0

"sistema operativo neutro". Se non esiste una libreria di questo tipo, quindi Windoze e Mac. – John

risposta

7

Per Mac:

gem install rb-appscript 

Quindi è possibile testarlo con uno script come questo:

require "rubygems" 
require "appscript" 
include Appscript 

app("TextEdit").activate 
app("System Events").keystroke("Look Ma, keystrokes!") 

Per Windows: (non testato, borrowed from this thread)

require "win32ole" 

wsh = WIN32OLE.new("WScript.Shell") 
wsh.Run("Notepad.exe") 
while not wsh.AppActivate("Notepad") 
    sleep .1 
end 
wsh.SendKeys("Look Ma, keystrokes!") 
+0

Che dire di Linux (Ubuntu)? –

+0

@AndreyBotalov Non lo so. Qualcuno dovrebbe pubblicare una risposta per questo. :-) –

4

F o completezza, pensavo di includere una soluzione per chi usa Linux.

Su Linux, per automatizzare le sequenze di tasti è possibile utilizzare xdotool. C'è anche un gioiello per Ruby, ma in realtà non è necessario se si considera che inviare sequenze di tasti è un semplice:

%x(xdotool key super+w) #this would press the keys super and w simultaneoulsy

C'è anche eventi del mouse troppo.

0

Sfortunatamente, rb-applescript è un po 'datato e traballante.

per Mac, si consiglia di utilizzare:

%x(osascript -e 'tell application "System Events" to keystroke "Look Ma, keystrokes!"') 
Problemi correlati