munepi.com > Article > エクスプローラーにタブをつける

エクスプローラーにタブをつける

ディレクトリを簡単に切り換えたい!

プログラムを作っていると、 includeやらlibやらsourceやらのライブラリディレクトリや MailEraserやらPEijiroやらのプログラムディレクトリなどを、 ものすごい頻度で行き来することになります。

いちいちツリーからディレクトリを切り換えるのは面倒なので、 エクスプローラーを2つとコマンドプロンプトを2つくらい出して作業しているのですが、 それでもツリーのお世話になることしばしばです。

そこで考えました。エクスプローラーにタブがあって、 そこで切り換えられたら便利なんじゃないだろうか!

流行のタブブラウザの思想と同じですね。

まずはネットで探す

こういう時はプログラマ心が「つくれつくれ」と言い出すのですが、 まず検索したりVectorをチェックします。すでに十分な機能のものが存在する場合はそっちを使うほうがいいですからね。

タブを備えたファイラーがひとつありましたが、、 所望のものではありません。

作成決定! まずは、どのようにすればエクスプローラーにタブをつけられるかの検討です。

IEにはGoogleツールバーというのがあって、独自のバーを追加しています。IEとエクスプローラーはIE4以降の環境では同じものなので、 この技術が応用できるはず。今度はどうやってバーを追加するのかを調べました。

これにはGoogleやMicrosoftで 「エクスプローラー」「バー」「拡張」「追加」「エクステンション」などを キーワードにして探しまくりましたがほとんど情報は得られません。

そこでエクスプローラーのメニューの機能を拡張するソフトなどにも対象を広げ、 そういうものがないか探しました。

Browser Helper Object / Band Object

すると、エクスプローラーにファイル検索バーをつけるプログラムがひとつ見つかりました。そしてそのソフトのサイトへ行くと、 「このソフトはBrowser Helper Objectの技術を使っている。IEのバージョンに注意せよ」 なるコメントがあるではないですか(英語で)。

むむっ。Browser Helper Object、これだ!

Browser Helper Object(以下、BHO)は、 IEやエクスプローラー(以下、まとめてエクスプローラー)が起動するときに自動で起動する COMオブジェクト(要するにDLL)で、 その中から呼び出しもとのエクスプローラーにアクセスすることで さまざまな機能を実現するものだそうです。

MSDNにドキュメントが(英語ですが)あります。 サンプルソースコードなどもありました。

一方、もうひとつの要素技術となる「バー」を作る方法は、Band Objectというものでした。こちらはBHOを探しているときに「バー」の方で引っかかっていたのを発見しました。

実装はATL Wizardで

これで何を使えばいいかはわかりました。あとはどうすれば実装できるかを考えなければなりません。

BHOもBand ObjectもCOMなので、 Visual C++のATL Wizardを使ってつくるのが良さそうです。サンプルもそうなってました。

「新規プロジェクト」→「ATL COM AppWizard」→設定はデフォルトにしました。その後、ワークスペースのクラスタブで 「ATLオブジェクトの新規作成」→「Internet Explorer オブジェクト」を選びます。

ここまでで、BHOを継承したCOMが出来上がりました。あとは、Band Objectを継承しなければいけないが、 それはこれからまたいろいろ調べてみたいと思います。

今日はここまで。

今日の参考サイト