Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > win32oleライブラリ > WIN32OLE_TYPEクラス > default_event_sources
default_event_sources -> [WIN32OLE_TYPE]
[permalink][rdoc]型が持つソースインターフェイスを取得します。
default_event_sourcesメソッドは、selfがCoClass(コンポーネントクラス) の場合、そのクラスがサポートするデフォルトのソースインターフェイス(イ ベントの通知元となるインターフェイス)を返します。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 14.0 Object Library', 'Worksheet') tobj.default_event_sources.map {|intf| intf.name} #=> ["DocEvents"]
WIN32OLE_EVENT.newでインターフェイス名を指定しない場合は、ここで 返されたインターフェイスが選択されます。
次のサンプルは、IEのnaviaget2メソッドによってどのようなイベントが通知さ れるかを、実際にメソッド呼び出し(=イベント通知)をトレースして調べるプ ログラムです。イベントを受け付けるために、 WIN32OLE_EVENT.message_loopの呼び出しが必要な点に注意してください。 ここでは最終イベントのStatusTextChangeイベントのメッセージについては既 知としています。
# coding : cp932 require 'win32ole' type = WIN32OLE_TYPE.new('Microsoft Internet Controls', 'InternetExplorer') ctl = WIN32OLE.new(type.progid) source = type.default_event_sources[0] class WebEvent def initialize @completed = false end attr_reader :completed end source.ole_methods.each do |m| WebEvent.module_eval do define_method("on#{m.name}") do |*arg| if arg[0] == "ページが表示されました" @completed = true end puts "#{Time.now}: #{m.name} was called" p arg end end end evt = WIN32OLE_EVENT.new(ctl) evt.handler = WebEvent.new ctl.navigate2 'http://www.ruby-lang.org/' loop do break if evt.handler.completed WIN32OLE_EVENT.message_loop end ctl.Quit
このプログラムを実行するとWindows7のIE8環境では以下のような出力を得られ ます。
2010-10-06 22:33:54 +0900: PropertyChange was called ["{265b75c1-4158-11d0-90f6-00c04fd497ea}"] 2010-10-06 22:33:54 +0900: BeforeNavigate2 was called [#<WIN32OLE:0x9d08f0>, "http://www.ruby-lang.org/", 0, "", nil, "", false] 2010-10-06 22:33:54 +0900: DownloadBegin was called [] 2010-10-06 22:33:54 +0900: PropertyChange was called ["{D0FCA420-D3F5-11CF-B211-00AA004AE837}"] 2010-10-06 22:33:54 +0900: CommandStateChange was called [2, false] 2010-10-06 22:33:54 +0900: CommandStateChange was called [1, false] 2010-10-06 22:33:54 +0900: StatusTextChange was called ["www.ruby-lang.org を検索しています"] 2010-10-06 22:33:54 +0900: ProgressChange was called [100, 10000] 2010-10-06 22:33:54 +0900: StatusTextChange was called ["サイト 221.186.184.68 に接続しています"] 2010-10-06 22:33:54 +0900: StatusTextChange was called ["Web サイトが見つかりました。応答を待っています..."] …… 2010-10-06 22:33:54 +0900: TitleChange was called ["オブジェクト指向スクリプト言語 Ruby"] 2010-10-06 22:33:54 +0900: StatusTextChange was called ["待機中: http://www.ruby-lang.org/ja/ ..."] 2010-10-06 22:33:54 +0900: ProgressChange was called [10000, 10000] 2010-10-06 22:33:54 +0900: ProgressChange was called [-1, 10000] 2010-10-06 22:33:54 +0900: DownloadComplete was called [] 2010-10-06 22:33:54 +0900: ProgressChange was called [10000, 10000] 2010-10-06 22:33:54 +0900: DocumentComplete was called [#<WIN32OLE:0x438a2f8>, "http://www.ruby-lang.org/ja/"] 2010-10-06 22:33:54 +0900: StatusTextChange was called ["ページが表示されました"]
[SEE_ALSO] WIN32OLE_TYPE.new, WIN32OLE_TYPE#progid, WIN32OLE_TYPE#ole_methods, WIN32OLE_METHOD#name, WIN32OLE_EVENT.new, WIN32OLE_EVENT#handler=, WIN32OLE_EVENT.message_loop