John
John

Reputation: 5915

How to send keyboard and mouse commands to the underlying operating system using Ruby?

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

Answers (3)

Ryan McGeary
Ryan McGeary

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

kbrock
kbrock

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

Seanny123
Seanny123

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

Related Questions