Class: SleipnirAPI::Sleipnir
- Inherits:
-
Object
- Object
- SleipnirAPI::Sleipnir
- Includes:
- Enumerable, Dialog, FFI::User32, KeyState, Util
- Defined in:
- lib/sleipnir_api/sleipnir.rb
Overview
このクラスは Sleipnir の COM オブジェクト (Sleipnir.API) の wrapper クラスです。Sleipnir 全体を操作する API を定義しています。
-
このオブジェクトは SleipnirAPI.new または SleipnirAPI.connect で取得します。
-
SleipnirAPI::KeyState と SleipnirAPI::Dialog で定義されているメソッドが利用できます。
-
このクラスは Enumerable を include しています。
例:
pnir = SleipnirAPI.new
pnir.user_agent = "Ruby/SleipnirAPI"
pnir.new_tab
pnir.open("http://www.ruby-lang.org/", true)
pnir.count #=> 2
pnir.active_tab.index #=> 1
pnir.switch_to_tab("about:blank") #=> #<SleipnirAPI::Tab:24642128>
pnir.active_tab.index #=> 0
pnir.tabs #=> [#<SleipnirAPI::Tab:24642128>, #<SleipnirAPI::Tab:6685682>]
pnir.active_tab.close #=> nil
pnir.count #=> 1
# Enumerable method
read, unread = pnir.partition{|tab| tab.read? }
p read
p unread
alllinks = pnir.inject([]) do |acc,tab|
links = []
tab.document.getElementsByTagName("a").each do |a|
links << a.href if a.href and a.href != ""
end
acc + links
end
p alllinks
Constant Summary
Constants included from FFI::User32
FFI::User32::GW_HWNDFIRST, FFI::User32::GW_HWNDLAST, FFI::User32::GW_HWNDNEXT, FFI::User32::GW_HWNDPREV
Instance Attribute Summary collapse
-
#api ⇒ Object
readonly
Sleipnir.API WIN32OLE Object.
-
#handle ⇒ Object
(also: #hwnd)
readonly
Sleipnir のウィンドウハンドル.
-
#version ⇒ Object
readonly
Sleipnir のバージョン.
Instance Method Summary collapse
-
#active_document ⇒ Object
call-seq: active_document -> DispHTMLDocument or nil.
-
#active_index ⇒ Object
アクティブなドキュメントのタブ位置を取得します。.
-
#active_index=(index) ⇒ Object
指定されたタブ位置のドキュメントをアクティブにします。.
-
#active_tab ⇒ Object
call-seq: active_tab -> SleipnirAPI::Tab or nil.
-
#add_search_bar_history ⇒ Object
検索バーの履歴に項目を追加します。 文字列がすでに存在する場合は先頭に移動されます。.
-
#address_bar_string ⇒ Object
アドレスバーの文字列を取得します。.
-
#address_bar_string=(str) ⇒ Object
アドレスバーの文字列を設定します。.
-
#app_path ⇒ Object
Sleipnir.exe の存在するディレクトリを取得します。.
-
#bring_window_to_top(timeout = 3) ⇒ Object
Sleipnir ウィンドウをフォアグランドにする。.
-
#capture_browser(filename) ⇒ Object
Sleipnir ウィンドウ全体のスクリーンショットを指定されたファイルに保存します。.
-
#count ⇒ Object
開かれているドキュメントの数を取得します。.
-
#document(index) ⇒ Object
call-seq: document(index) -> DispHTMLDocument or nil.
-
#documents ⇒ Object
call-seq: documents() -> array of DispHTMLDocument.
-
#each(&block) ⇒ Object
call-seq: each {|tab| … }.
-
#each_document(&block) ⇒ Object
call-seq: each_document {|doc| … }.
-
#each_eval(&block) ⇒ Object
call-seq: each_eval{ … }.
-
#exec_command(command) ⇒ Object
Sleipnir の任意のメニューを
commandで指定して実行します。. -
#favorite_file ⇒ Object
お気に入りファイルを取得します。.
-
#favorite_file=(filename) ⇒ Object
お気に入りファイルを設定します。.
-
#get_url_tab(url) ⇒ Object
call-seq: get_url_tab(url) -> SleipnirAPI::Tab.
-
#initialize(api) ⇒ Sleipnir
constructor
A new instance of Sleipnir.
-
#new_tab(url = "about:blank", active = true) ⇒ Object
call-seq: new_tab(url = “about:blank”, active = true) -> SleipnirAPI::Tab.
-
#open(url, active = true) ⇒ Object
call-seq: open(url, active = true) -> SleipnirAPI::Tab.
-
#output ⇒ Object
アウトプットバーを操作するオブジェクトを取得します。.
-
#profile(ini = nil, opts = nil) ⇒ Object
call-seq: profile() profile(ini_filename) profile(:default => “default value”) profile(:cipher => true) profile(:cipher => true, :default => “default value”) profile(:ini => ini_filename, :default => “default value”) profile(:ini => ini_filename, :cipher => true) profile(:ini => ini_filename, :cipher => true, :default => “default value”).
-
#quit ⇒ Object
Sleipnir を終了します。.
-
#reload_closed_url ⇒ Object
ClosedURL.ini を再度読み込みます。.
-
#resource_path ⇒ Object
リソースの読み込まれるディレクトリを取得します。.
-
#result ⇒ Object
Sleipni API の結果を取得します。.
-
#save_active_tab ⇒ Object
現在アクティブなタブを保存して block を実行します。.
-
#save_closed_url ⇒ Object
最近閉じたページをファイルに上書き保存します。.
-
#save_favorite(filename) ⇒ Object
指定されたファイルにお気に入りを保存します。.
-
#script_path ⇒ Object
スクリプトの読み込まれるディレクトリを取得します。.
-
#search_bar_string ⇒ Object
検索バーの文字列を取得します。.
-
#search_bar_string=(str) ⇒ Object
検索バーの文字列を設定します。.
-
#sleipnir ⇒ Object
self を返します。.
-
#switch_to_tab(tab_or_url) ⇒ Object
call-seq: switch_to_tab(tab_or_url) -> SleipnirAPI::Tab.
-
#tab(index) ⇒ Object
call-seq: tab(index) -> SleipnirAPI::Tab or nil.
-
#tabs ⇒ Object
call-seq: tabs() -> array of SleipnirAPI::Tab.
-
#url ⇒ Object
アクティブなドキュメントの URL を取得します。.
-
#url=(url) ⇒ Object
アクティブなドキュメントの URL を設定します。.
-
#user_agent ⇒ Object
UserAgent を取得します。.
-
#user_agent=(ua) ⇒ Object
UserAgent を設定します。.
-
#user_path ⇒ Object
各種設定の保存するディレクトリを取得します。.
-
#v2? ⇒ Boolean
Sleipnir 2.xx なら true.
Methods included from FFI::User32
each_child_window, find_child_window_by_classname, get_class_name, get_first_child, get_first_sibling, get_last_sibling, get_next_sibling, get_prev_sibling, get_top_window, get_window, get_window_process_id, get_window_rect, get_window_thread_id, get_window_thread_process_id, list_window, with_window_dc
Methods included from FFI::Base
Methods included from Dialog
#beep, #input_box, #message_box, #msgbox
Methods included from KeyState
#alt_down?, #ctrl_down?, #shift_down?
Methods included from Util
#ensure_version, #join_keyword
Constructor Details
#initialize(api) ⇒ Sleipnir
Returns a new instance of Sleipnir.
68 69 70 71 72 |
# File 'lib/sleipnir_api/sleipnir.rb', line 68 def initialize(api) @api = api @version = api.Version @handle = api.Handle end |
Instance Attribute Details
#api ⇒ Object (readonly)
Sleipnir.API WIN32OLE Object
58 59 60 |
# File 'lib/sleipnir_api/sleipnir.rb', line 58 def api @api end |
#handle ⇒ Object (readonly) Also known as: hwnd
Sleipnir のウィンドウハンドル
61 62 63 |
# File 'lib/sleipnir_api/sleipnir.rb', line 61 def handle @handle end |
#version ⇒ Object (readonly)
Sleipnir のバージョン
65 66 67 |
# File 'lib/sleipnir_api/sleipnir.rb', line 65 def version @version end |
Instance Method Details
#active_document ⇒ Object
call-seq:
active_document -> DispHTMLDocument or nil
アクティブなドキュメントの DispHTMLDocument (WIN32OLE オブジェクト) を取得します。アクティブなドキュメントが存在しない場合は nil を返します。
242 243 244 245 246 |
# File 'lib/sleipnir_api/sleipnir.rb', line 242 def active_document if t = active_tab t.document end end |
#active_index ⇒ Object
アクティブなドキュメントのタブ位置を取得します。
219 220 221 |
# File 'lib/sleipnir_api/sleipnir.rb', line 219 def active_index api.ActiveIndex end |
#active_index=(index) ⇒ Object
指定されたタブ位置のドキュメントをアクティブにします。
224 225 226 |
# File 'lib/sleipnir_api/sleipnir.rb', line 224 def active_index=(index) api.ActiveIndex=(index) #:nodoc: end |
#active_tab ⇒ Object
call-seq:
active_tab -> SleipnirAPI::Tab or nil
アクティブなドキュメントの SleipnirAPI::Tab を取得します。アクティブなドキュメントが存在しない場合は nil を返します。
233 234 235 |
# File 'lib/sleipnir_api/sleipnir.rb', line 233 def active_tab tab(active_index) end |
#add_search_bar_history ⇒ Object
検索バーの履歴に項目を追加します。文字列がすでに存在する場合は先頭に移動されます。
360 361 362 |
# File 'lib/sleipnir_api/sleipnir.rb', line 360 def api.AddSearchBarHistory end |
#address_bar_string ⇒ Object
アドレスバーの文字列を取得します。
90 91 92 |
# File 'lib/sleipnir_api/sleipnir.rb', line 90 def api.AddressBarString end |
#address_bar_string=(str) ⇒ Object
アドレスバーの文字列を設定します。
95 96 97 |
# File 'lib/sleipnir_api/sleipnir.rb', line 95 def (str) api.AddressBarString=(str) #:nodoc: end |
#app_path ⇒ Object
Sleipnir.exe の存在するディレクトリを取得します。
145 146 147 |
# File 'lib/sleipnir_api/sleipnir.rb', line 145 def app_path api.AppPath end |
#bring_window_to_top(timeout = 3) ⇒ Object
Sleipnir ウィンドウをフォアグランドにする。
465 466 467 468 469 470 471 472 473 474 |
# File 'lib/sleipnir_api/sleipnir.rb', line 465 def bring_window_to_top(timeout=3) timeout(timeout) { while GetForegroundWindow() != hwnd BringWindowToTop(hwnd) CloseWindow(hwnd) OpenIcon(hwnd) sleep(0.1) end } end |
#capture_browser(filename) ⇒ Object
Sleipnir ウィンドウ全体のスクリーンショットを指定されたファイルに保存します。
-
ファイル形式は BMP です。
-
Sleipnir のスクロールバーやツールバーも保存されます。
-
ページが複数ページからなる場合、表示中の部分しか保存されません。
402 403 404 405 406 |
# File 'lib/sleipnir_api/sleipnir.rb', line 402 def capture_browser(filename) captor = SleipnirAPI::ScreenCaptor.new(sleipnir, nil) bmp = captor.capture_browser bmp.save(filename) end |
#count ⇒ Object
開かれているドキュメントの数を取得します。
166 167 168 |
# File 'lib/sleipnir_api/sleipnir.rb', line 166 def count api.GetCount end |
#document(index) ⇒ Object
call-seq:
document(index) -> DispHTMLDocument or nil
指定されたタブ位置の DispHTMLDocument (WIN32OLE オブジェクト) を取得します。存在しないタブ位置を指定した場合は nil を返します。
254 255 256 257 258 |
# File 'lib/sleipnir_api/sleipnir.rb', line 254 def document(index) if t = tab(index) t.document end end |
#documents ⇒ Object
call-seq:
documents() -> array of DispHTMLDocument
すべてのタブに対応する DispHTMLDocument (WIN32OLE オブジェクト) オブジェクトを返します。
264 265 266 |
# File 'lib/sleipnir_api/sleipnir.rb', line 264 def documents tabs.map{|e| e.document } end |
#each(&block) ⇒ Object
call-seq:
each {|tab| ... }
すべてのタブを走査します。
block の引数には SleipnirAPI::Tab オブジェクトが渡されます。
198 199 200 |
# File 'lib/sleipnir_api/sleipnir.rb', line 198 def each(&block) tabs.each(&block) end |
#each_document(&block) ⇒ Object
call-seq:
each_document {|doc| ... }
すべてのタブのドキュメントオブジェクトを走査します。
block の引数には DispHTMLDocument (WIN32OLE) オブジェクトが渡されます。
274 275 276 |
# File 'lib/sleipnir_api/sleipnir.rb', line 274 def each_document(&block) documents.each(&block) end |
#each_eval(&block) ⇒ Object
call-seq:
each_eval{ ... }
すべてのタブで指定された block を評価します。block は SleipnirAPI::Tab のコンテキストで評価されます (self が SleipnirAPI::Tab です)
pnir.each_eval do
if location.href =~ /workspace/
self.navigate_lock = true
end
end
214 215 216 |
# File 'lib/sleipnir_api/sleipnir.rb', line 214 def each_eval(&block) each {|tab| tab.instance_eval(&block) } end |
#exec_command(command) ⇒ Object
Sleipnir の任意のメニューを command で指定して実行します。
command には以下の値を指定可能です。
-
SleipnirAPI::Command オブジェクト
-
文字列 or 配列 (メニュー文字列)
-
メニュー文字列のエンコーディングは Shift_JIS です
-
-
数値 (コマンド番号)
例:
pnir = SleipnirAPI.connect
pnir.exec_command(57664)
pnir.exec_command("バージョン情報")
pnir.exec_command(SleipnirAPI::Command["バージョン情報"])
pnir.exec_command(["Netscape ブックマーク", "インポート"])
381 382 383 384 385 386 387 388 389 390 391 392 393 394 |
# File 'lib/sleipnir_api/sleipnir.rb', line 381 def exec_command(command) case command when String, Array c = SleipnirAPI::Command[*Array(command)] raise ArgumentError, "No such command: #{command}" unless c exec_command(c.command_id) when SleipnirAPI::Command exec_command(command.command_id) when Integer api.ExecCommand(command) else raise ArgumentError, "Illegal command: #{command.inspect}" end end |
#favorite_file ⇒ Object
お気に入りファイルを取得します。
120 121 122 |
# File 'lib/sleipnir_api/sleipnir.rb', line 120 def favorite_file api.FavoriteFile end |
#favorite_file=(filename) ⇒ Object
お気に入りファイルを設定します。
125 126 127 |
# File 'lib/sleipnir_api/sleipnir.rb', line 125 def favorite_file=(filename) api.FavoriteFile=(filename) #:nodoc: end |
#get_url_tab(url) ⇒ Object
call-seq:
get_url_tab(url) -> SleipnirAPI::Tab
指定された url を表示している最初の SleipnirAPI::Tab を返します。
308 309 310 |
# File 'lib/sleipnir_api/sleipnir.rb', line 308 def get_url_tab(url) tabs.find {|tab| tab.document.location.href == url } end |
#new_tab(url = "about:blank", active = true) ⇒ Object
call-seq:
new_tab(url = "about:blank", active = true) -> SleipnirAPI::Tab
新しいタブを作成し SleipnirAPI::Tab を返します。
-
urlに nil を指定した場合は about:blank を開きます。 -
activeに true を指定した場合、作成したタブがアクティブになります。
287 288 289 290 |
# File 'lib/sleipnir_api/sleipnir.rb', line 287 def new_tab(url = "about:blank", active = true) docid = api.NewWindow(url || "about:blank", active) SleipnirAPI::Tab.new(self, docid) end |
#open(url, active = true) ⇒ Object
call-seq:
open(url, active = true) -> SleipnirAPI::Tab
新しいタブで指定された url を開き SleipnirAPI::Tab を返します。
url を省略できない new_tab です。
299 300 301 |
# File 'lib/sleipnir_api/sleipnir.rb', line 299 def open(url, active = true) new_tab(url, active) end |
#output ⇒ Object
アウトプットバーを操作するオブジェクトを取得します。
See Also: SleipnirAPI::Output
412 413 414 |
# File 'lib/sleipnir_api/sleipnir.rb', line 412 def output SleipnirAPI::Output.new(self) end |
#profile(ini = nil, opts = nil) ⇒ Object
call-seq:
profile()
profile(ini_filename)
profile(:default => "default value")
profile(:cipher => true)
profile(:cipher => true, :default => "default value")
profile(:ini => ini_filename, :default => "default value")
profile(:ini => ini_filename, :cipher => true)
profile(:ini => ini_filename, :cipher => true, :default => "default value")
ini ファイルを操作するオブジェクトを取得します。
引数には ini ファイル名、SleipnirAPI::Profile#get_string などに指定するオプションのデフォルト値を指定します。ここで指定したオプションは各メソッドの引数で上書きすることができます。
なお、SleipnirAPI::Profile#delete はオプション引数を取らないのでここで指定した値は完全に無視されます。
ini ファイル名を指定した場合、SleipnirAPI::Profile::Ini オブジェクトを返します。指定しない場合は SleipnirAPI::Profile オブジェクトを返します。
ex)
prof = pnir.profile #=> #<SleipnirAPI::Profile:0xdeadbeaf ...>
proxy = pnir.profile("Proxy.ini") #=> #<SleipnirAPI::Profile::Ini:0xdeadbeaf: Proxy.ini, opts={}>
See Also: SleipnirAPI::Profile, SleipnirAPI::Profile::Ini
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 |
# File 'lib/sleipnir_api/sleipnir.rb', line 443 def profile(ini = nil, opts = nil) if ini case ini when Hash t = ini.delete(:ini) ini, opts = t, ini when String, Symbol ini = ini.to_s else raise ArgumentError, "Invalid ini filename `#{ini.inspect}':#{ini.class} (expected String or Symbol)" end end r = SleipnirAPI::Profile.new(self, opts) if ini r.ini(ini) else r end end |
#quit ⇒ Object
Sleipnir を終了します。
85 86 87 |
# File 'lib/sleipnir_api/sleipnir.rb', line 85 def quit SleipnirAPI::Process.terminate!(self.handle) end |
#reload_closed_url ⇒ Object
ClosedURL.ini を再度読み込みます。
354 355 356 |
# File 'lib/sleipnir_api/sleipnir.rb', line 354 def reload_closed_url api.ReloadClosedURL end |
#resource_path ⇒ Object
リソースの読み込まれるディレクトリを取得します。
155 156 157 |
# File 'lib/sleipnir_api/sleipnir.rb', line 155 def resource_path api.ResourcePath end |
#result ⇒ Object
Sleipni API の結果を取得します。
140 141 142 |
# File 'lib/sleipnir_api/sleipnir.rb', line 140 def result api.Result end |
#save_active_tab ⇒ Object
現在アクティブなタブを保存して block を実行します。
331 332 333 334 335 336 337 338 |
# File 'lib/sleipnir_api/sleipnir.rb', line 331 def save_active_tab actived = active_tab begin yield ensure actived.activate unless actived.closed? end end |
#save_closed_url ⇒ Object
最近閉じたページをファイルに上書き保存します。
349 350 351 |
# File 'lib/sleipnir_api/sleipnir.rb', line 349 def save_closed_url api.SaveClosedURL end |
#save_favorite(filename) ⇒ Object
指定されたファイルにお気に入りを保存します。
保存できた場合 true を返します。
344 345 346 |
# File 'lib/sleipnir_api/sleipnir.rb', line 344 def save_favorite(filename) api.SaveFavorite(filename) end |
#script_path ⇒ Object
スクリプトの読み込まれるディレクトリを取得します。
150 151 152 |
# File 'lib/sleipnir_api/sleipnir.rb', line 150 def script_path api.ScriptPath end |
#search_bar_string ⇒ Object
検索バーの文字列を取得します。
100 101 102 |
# File 'lib/sleipnir_api/sleipnir.rb', line 100 def api.SearchBarString end |
#search_bar_string=(str) ⇒ Object
検索バーの文字列を設定します。
105 106 107 |
# File 'lib/sleipnir_api/sleipnir.rb', line 105 def (str) api.SearchBarString=(str) #:nodoc: end |
#sleipnir ⇒ Object
self を返します。
75 76 77 |
# File 'lib/sleipnir_api/sleipnir.rb', line 75 def sleipnir self end |
#switch_to_tab(tab_or_url) ⇒ Object
call-seq:
switch_to_tab(tab_or_url) -> SleipnirAPI::Tab
指定された url を表示している最初の SleipnirAPI::Tab をアクティブにして返します。
317 318 319 320 321 322 323 324 325 326 327 328 |
# File 'lib/sleipnir_api/sleipnir.rb', line 317 def switch_to_tab(tab_or_url) case tab_or_url when SleipnirAPI::Tab t = tab_or_url else t = get_url_tab(tab_or_url.to_s) end if t t.activate t end end |
#tab(index) ⇒ Object
call-seq:
tab(index) -> SleipnirAPI::Tab or nil
指定されたタブ位置のドキュメントを返します。存在しないタブ位置を指定した場合は nil を返します。
See Also: SleipnirAPI::Tab
178 179 180 181 182 |
# File 'lib/sleipnir_api/sleipnir.rb', line 178 def tab(index) if (0...count).include?(index) SleipnirAPI::Tab.new(self, api.GetDocumentId(index)) end end |
#tabs ⇒ Object
call-seq:
tabs() -> array of SleipnirAPI::Tab
すべてのタブに対応する SleipnirAPI::Tab オブジェクトを返します。
188 189 190 |
# File 'lib/sleipnir_api/sleipnir.rb', line 188 def tabs (0...count).map{|i| tab(i) } end |
#url ⇒ Object
アクティブなドキュメントの URL を取得します。
110 111 112 |
# File 'lib/sleipnir_api/sleipnir.rb', line 110 def url api.URL end |
#url=(url) ⇒ Object
アクティブなドキュメントの URL を設定します。
115 116 117 |
# File 'lib/sleipnir_api/sleipnir.rb', line 115 def url=(url) api.URL=(url) #:nodoc: end |
#user_agent ⇒ Object
UserAgent を取得します。
130 131 132 |
# File 'lib/sleipnir_api/sleipnir.rb', line 130 def user_agent api.UserAgent end |
#user_agent=(ua) ⇒ Object
UserAgent を設定します。
135 136 137 |
# File 'lib/sleipnir_api/sleipnir.rb', line 135 def user_agent=(ua) api.UserAgent=(ua) #:nodoc: end |
#user_path ⇒ Object
各種設定の保存するディレクトリを取得します。
160 161 162 |
# File 'lib/sleipnir_api/sleipnir.rb', line 160 def user_path api.UserPath end |
#v2? ⇒ Boolean
Sleipnir 2.xx なら true
80 81 82 |
# File 'lib/sleipnir_api/sleipnir.rb', line 80 def v2? self.version >= 200 end |