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

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

Win32ole とは

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

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

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

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

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

WSHShell を操作

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

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

事前準備

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

require 'win32ole'
wsh = WIN32OLE.new ('Wscript.Shell')

プログラム起動

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

wsh.Run ('notepad.exe')

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

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

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

wsh.AppActivate ('Title')

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

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

wsh.SendKeys ('A')

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

Sample

notepad

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

require 'win32ole'

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

wsh.SendKeys ('Hello')

wsh.Popup ('Happy Hacking!!')

explorer

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

# 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}')

Special Thanks