Como enviar comandos de teclado e mouse para o sistema operacional subjacente usando Ruby?
-
22-07-2019 - |
Pergunta
Existe uma maneira neutra do sistema operacional para o Ruby enviar eventos de teclado e mouse para o sistema operacional subjacente?
Uma abordagem óbvia (para mim) é usar as ligações Ruby/Java e usar java.awt.robot, mas isso parece bobo.
Solução
Para Mac:
gem install rb-appscript
Então você pode testá -lo com um script como este:
require "rubygems"
require "appscript"
include Appscript
app("TextEdit").activate
app("System Events").keystroke("Look Ma, keystrokes!")
Para Windows: (não testado, emprestado deste tópico)
require "win32ole"
wsh = WIN32OLE.new("WScript.Shell")
wsh.Run("Notepad.exe")
while not wsh.AppActivate("Notepad")
sleep .1
end
wsh.SendKeys("Look Ma, keystrokes!")
Outras dicas
Por uma questão de completude, pensei em incluir uma solução para se você estiver usando o Linux.
No Linux, para automatizar as teclas, você pode usar o XDOTOOL. Há também uma jóia para Ruby, mas não é realmente necessário, considerando que o envio de tecla é fácil como:
%x(xdotool key super+w) #this would press the keys super and w simultaneoulsy
Também há eventos de mouse também.
Infelizmente, rb-applescript
é um pouco datado e instável.
Para o Mac, você pode querer usar:
%x(osascript -e 'tell application "System Events" to keystroke "Look Ma, keystrokes!"')