プログラム悪戦苦闘日記

はてなダイアリーからの移行(遺物)

RubyからWin32OLEを操作する1

 RubyからWin32OLWが操作できるのは知っていたが、あまり情報がない。
なにげなくWebで検索していたら、Ruby Magazine(るびま)に連載があった。

第1回 http://jp.rubyist.net/magazine/?0003-Win32OLE
第2回 http://jp.rubyist.net/magazine/?0004-Win32OLE

ここの記事からおいしい部分だけを簡単にまとめると…

第1回の記事内にあった、「Internet Explorerを立ち上げ'Ruby'を検索する」のYahoo!

require 'win32ole'

ie = WIN32OLE.new('InternetExplorer.Application')
ie.navigate("http://www.yahoo.co.jp")
#ie.navigate("http://www.google.co.jp")
ie.visible = true

while ie.busy
	sleep 1
end

q       = ie.document.all.item("p")			# 「検索」テキストボックスを取得 <input name="p" ...
q.value = "ruby"							# 値を入れる
button   = ie.document.all.item("search")	# 「検索」ボタンを取得 <input name="search" ...
button.click								# ボタンをクリック!

 本家には説明がないので、簡単に解説を加えると、
ie = WIN32OLE.new('InternetExplorer.Application') でCOMを取得
ie.document.all.item("p") で「検索」のテキストボックスオブジェクトを取得。
 "p"はテキストボックスの名前。
ie.document.all.item("search") で「検索」ボタンを取得。
 "search"はボタンの名前。
 
 ここで重要なのは、1番目のCOMを取得の部分。
COMを取得するには、WIN32OLE.new()するのだが、WIN32OLE.new()の引数にはProgIDを指定するのだそうだ。
ProgIDって、たしかCLSIDとか言われていたCOMを識別する128bitの値のことだと思った。
別名で文字列もあるので、IEの場合 'InternetExplorer.Application' で指定できる。
他のは本家を見てくれ。

 それで問題になるのは ProgID の調べ方な訳で、やり方は2つあるみたい。
1. Rubyのみを使った場合
 これは本家をみてくれ
2. オブジェクトブラウザを使った場合
 MS Officeならば、例えばMS Excelの場合、
メニューの 「ツール→マクロ→Visual Basic Editor」 (あるいは Alt+F11) でVBEditorを起動して、
メニューの 「表示→オブジェクトブラウザ」(あるいは F2)というのがある。
 Visal Studioを持っているなら、メニューの「ツール→OLE/COM オブジェクト ビューア」
がいいと思う。

 第2回のパクリまとめは次回。