Como enviar comandos de teclado e mouse para o sistema operacional subjacente usando Ruby?

StackOverflow https://stackoverflow.com/questions/1446327

  •  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.

Foi útil?

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!"')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top