How to send keyboard and mouse commands to the underlying operating system using Ruby?
-
22-07-2019 - |
Question
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.
Solution
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!")
OTHER TIPS
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.
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!"')