2009-09-18 5 views
8

Existe-t-il une manière neutre pour le système d'exploitation de permettre à Ruby d'envoyer des événements de clavier et de souris au système d'exploitation sous-jacent?Comment envoyer des commandes de clavier et de souris au système d'exploitation sous-jacent en utilisant Ruby?

Une approche évidente (pour moi) est d'utiliser les liaisons Ruby/Java et d'utiliser java.awt.Robot, mais cela semble stupide.

+0

Quel système d'exploitation? Chaque plate-forme a ses propres fixations Ruby. – tadman

+0

"système d'exploitation neutre". Si aucune bibliothèque n'existe, alors Windoze et Mac. – John

Répondre

7

Pour Mac:

gem install rb-appscript 

Ensuite, vous pouvez le tester avec un script comme celui-ci:

require "rubygems" 
require "appscript" 
include Appscript 

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

Pour Windows: (non testé, 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

Qu'en est-il de Linux (Ubuntu)? –

+0

@AndreyBotalov Je ne sais pas. Quelqu'un devrait poster une réponse pour ça. :-) –

4

F ou souci de complétude, j'ai pensé que j'inclurais une solution pour si vous utilisez Linux. Sous Linux, pour automatiser les frappes, vous pouvez utiliser xdotool. Il y avait aussi un petit bijou pour Ruby, mais il est pas vraiment nécessaire étant donné que envoyer des frappes est facile:

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

Il y a aussi des événements de souris aussi.

0

Malheureusement, rb-applescript est un peu daté et fade.

pour Mac, vous pouvez utiliser:

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