Rubyがキーボードとマウスのイベントを基盤となるオペレーティングシステムに送信するためのオペレーティングシステム中立的な方法はありますか?
(私にとって)明らかなアプローチの 1 つは、Ruby/Java バインディングを使用し、java.awt.Robot を使用することですが、それはばかげているように思えます。
Rubyがキーボードとマウスのイベントを基盤となるオペレーティングシステムに送信するためのオペレーティングシステム中立的な方法はありますか?
(私にとって)明らかなアプローチの 1 つは、Ruby/Java バインディングを使用し、java.awt.Robot を使用することですが、それはばかげているように思えます。
Mac用:
gem install rb-appscript
次に、次のようなスクリプトでテストできます。
require "rubygems"
require "appscript"
include Appscript
app("TextEdit").activate
app("System Events").keystroke("Look Ma, keystrokes!")
Windows の場合: (未テスト、このスレッドから借用)
require "win32ole"
wsh = WIN32OLE.new("WScript.Shell")
wsh.Run("Notepad.exe")
while not wsh.AppActivate("Notepad")
sleep .1
end
wsh.SendKeys("Look Ma, keystrokes!")
完全を期すために、Linuxを使用している場合の解決策を含めると思いました。
Linux では、キーストロークを自動化するために xdotool を使用できます。Ruby 用の gem もありますが、キーストロークの送信が次のように簡単であることを考えると、実際には必須ではありません。
%x(xdotool key super+w) #this would press the keys super and w simultaneoulsy
マウスイベントもあります。
残念ながら、rb-applescript
少し時代遅れで不安定です。
Mac の場合は、次を使用できます。
%x(osascript -e 'tell application "System Events" to keystroke "Look Ma, keystrokes!"')