Written in Japanese(UTF-8)
2020.9.4
INASOFT


/トップ/ウィキペディア・タイマ ダウンロード/WebHelp/ヘルプトップ

本ソフトウェアの開発・公開は終了しています。

動作原理


(ここでは動作原理の説明のため、ネイティブなWindowsプログラミングに関する用語が登場します)

Windowsの機能を用いて描画されるウィンドウやコントロール(テキストボックスやボタンなど)は、そのすべてのウィンドウハンドルという、一意のIDが付けられています。

ウィンドウハンドルは、Windows内で実行されるすべてのウィンドウやコントロールに一意の値として振られており、「ウィンドウハンドルを経由しての文字列の読み出し」などを行うならば、例えば隣で動作しているプロセスのテキストボックスから、文字列を取得するなんてことができます。

これを実現している端的でわかりやすいソフトウェアの例といえば、ListView to CSVが挙げられます。このソフトウェアは、同一環境内で動作している他のプロセスのリストビュー・ツリービュー等から、文字列を取得することができまして、まさしくこの原理を利用しているものとなります。ListView to CSVの動作原理についての詳細は、ListView to CSVのヘルプの動作原理のページをご覧いただきたいと思います。


この原理を用いたブラウザURLの取得 - Internet Explorer の例

最も基本的な例として、Internet Explorer があります。

Internet Explorerの例

ウィンドウ上部にあるアドレスバーが、現在閲覧中のページのURLを示しており、本ソフトではここに表示されているテキストを取得することになります。従って、このアドレスバー内のテキストボックス部分のウィンドウハンドルを EnumWindows / EnumChildWindows 等のAPIで調べ、SendMessage でテキストを取得することになります。

これらAPIの使用方法などは省略するとして、アドレスバー内のテキストボックス部分のウィンドウハンドルを調べる方法を模索する手段として、Visual Studio に付属する Spy++ を用いる方法があります。

Spy++の画面

各ウィンドウには不変の文字列であるクラス名があります。上記画面で赤線を引いた「IEFrame」「WokerW」「ReBarWindow32」…「Edit」等です。実はIEのバージョンやWindowsの種類により、これらに多少の変動はあるのですが、基本的にはこれらの中のいくつかをかいつまんで参考にして探していくことにより、目的の文字列を得られます。

この方法は、原理的には Sleipnir や Google Chrome でも使えます(クラス名に違いがあるだけで、方法はほぼ同じ、ということ)。ところが、Windows の UI 機能に頼らず、独自の方法を使ってアドレスバーの表示や入力を実現しているブラウザもあります。Firefox, Opera, Safari などのブラウザです。そのため、これらのブラウザは、本ソフトでは対応不可能ということになります。

では、Firefoxで対応させているのは?

ところで本ソフトでは、かろうじてFirefoxへの対応を行っています。これはどのように行っているのでしょうか?

Firefoxでは、対応アドオン(wpthelp.xpi)を導入していることからわかるとおり、このアドオンがウィキペディア・タイマの本体プログラムにURL情報を送信し、それを利用して利用時間の算出等を本体プログラムが行うという仕組みにしています。

wpthelp.js

Firefoxのアドオンの作り方は専門のサイトに譲るとして、どのようなソースになっているかは、付属の wpthelp.xpi を解析していただければ、と思います。(xpiはzipをリネームしているだけなので、拡張子をzipにして展開すれば中身が見られます。また、さらにその中にある jarファイルも中身はzipなので、同じく拡張子をzipに変更して展開すれば、中身が見られます)

基本的な考え方としては、 %APPDATA% 内にある Firefoxのアドオンがアクセスできるディスク領域に、1秒おきに、現在閲覧中のページのURLをUnicodeテキスト形式ファイルとして書き込み、それを本体プログラムで監視する方法です。

なお、おそらくOperaでも、User.js あたりをつかって、これと同じ方法を実現できないかな…と調査中ではありますが、今のところ確実にうまくいく方法は見つかっておらず、模索中です。


 目次へ

※このページは、ソフトウェアに付属のヘルプファイルをWeb用に再構築したものです。大部分に自動変換を施しているため、一部は正しく変換しきれずに表示の乱れている箇所があるかもしれませんが、ご容赦下さい。また、本ドキュメントはアーカイブドキュメントであり、内容は、右上の作成日付の時点のものとなっております。一部、内容が古くなっている箇所があるかと思いますが、あらかじめご了承下さい。
※このページへは、自由にリンクしていただいてかまいません。
このページに関するご意見の受け付けは終了しています。

/トップ/ウィキペディア・タイマ ダウンロード/WebHelp/ヘルプトップ