Reputation: 5915
Is there an operating system neutral way for Ruby to send keyboard and mouse events to the underlying operating system?
One obvious (to me) approach is to use the Ruby/Java bindings and use java.awt.Robot, but that just seems silly.
Upvotes: 9
Views: 3795
Reputation: 239944
For Mac:
gem install rb-appscript
Then you can test it with a script like this:
require "rubygems"
require "appscript"
include Appscript
app("TextEdit").activate
app("System Events").keystroke("Look Ma, keystrokes!")
For Windows: (untested, 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!")
Upvotes: 7
Reputation: 1017
Unfortunatly, rb-applescript
is a little dated and wonky.
For the mac, you may want to use:
%x(osascript -e 'tell application "System Events" to keystroke "Look Ma, keystrokes!"')
Upvotes: 0
Reputation: 9346
For completeness sake, I thought I would include a solution for if you're using Linux.
On Linux, for automating keystrokes you can use xdotool. There also a gem for Ruby, but it's not really required considering that send keystrokes is a easy as:
%x(xdotool key super+w) #this would press the keys super and w simultaneoulsy
There's also mouse events too.
Upvotes: 5