Ruby の win32ole で Windows GUI アプリのキー操作を自動化する

はじめに

Windows 上のアプリをキーボード操作で自動化したいと考えた.

Ruby の win32ole を利用すれば, 実現できそうなので, 調べた.

Win32ole とは

Windows 版の Ruby には, win32ole というライブラリがある.

これを利用すると, Ruby から Windows のいろいろなアプリを操作できる. (Excel,iExplore などなど…)

Windows アプリにキーを送ることができるので, キー操作で完結するアプリならば, 操作を自動化できる, というわけだ.

以前, Excel の操作で win32ole を利用した.以下, 過去記事参照.

今回は, キーボード操作関連の情報をまとめる.

WSHShell を操作

WSHShell とは, Windows のシェル. これを Ruby から制御する.手順は 2 つ.

  • あるウィンドウをアクティブにできる
  • アクティブなウィンドウにキーコードを送る

事前準備

以下の 2 行で, まずは wsh オブジェクト生成.

[sourcecode language=”ruby” title=”” ]
require ‘win32ole’
wsh = WIN32OLE.new (‘Wscript.Shell’)
[/sourcecode]

プログラム起動

Run メソッドでプログラムを起動できる.

[sourcecode language=”ruby” title=”” ]
wsh.Run (‘notepad.exe’)
[/sourcecode]

ウィンドウをアクティブにする

AppActivate メソッドで ウィンドウをアクティブにできる.

アプリのタイトルを指定する. 成功すると, ture が返る. 失敗すると, false が返る.

[sourcecode language=”ruby” title=”” ]
wsh.AppActivate (‘Title’)
[/sourcecode]

ウィンドウにキーコードを送る

SendKeys メソッドで ウィンドウにキーを送る.

[sourcecode language=”ruby” title=”” ]
wsh.SendKeys (‘A’)
[/sourcecode]

詳細な SendKey コードはここにある.

Sample

notepad

メモ帳起動してなにか書く. Popup メソッドでメッセージ表示.

[sourcecode language=”ruby” title=”” ]
require ‘win32ole’

wsh = WIN32OLE.new (‘Wscript.Shell’)
wsh.Run (‘notepad.exe’)
wsh.AppActivate (‘無題’)

wsh.SendKeys (‘Hello’)

wsh.Popup (‘Happy Hacking!!’)
[/sourcecode]

explorer

C:-neraフォルダをコピーして test2 フォルダを作成する.

[sourcecode language=”ruby” title=”” ]
# coding: utf-8
require ‘win32ole’

wsh = WIN32OLE.new (‘Wscript.Shell’)
wsh.Run ‘explorer C:\Users\tsu-nera\Desktop’

sleep (3)

wsh.AppActivate (‘Desktop’)

# テストフォルダ選択
wsh.SendKeys (‘t’)

sleep (0.5)

# コピー & ペースト
wsh.SendKeys (‘^c^v’)

sleep (0.5)

# リーネム
wsh.SendKeys (‘{F2}test2{ENTER}’)

# popup
wsh.Popup (‘Copy Success!!’)
sleep (3)
wsh.SendKeys (‘{ENTER}’)
[/sourcecode]