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.
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!")
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With