IEツールバー開発

お仕事で調査中。めもめも。

要するに、IEツールバーを作るには次のようにすればいいらしい。IE5以降でサポートされる。

  • IObjectWithSite, IDeskBand, IPersistStream を実装したcoclassをつくる。
  • coclassはinproc serverで利用できなくてはならない。つまりは、COMサーバーはDLLでないと駄目。とにかく、そういう形でレジストリにcoclassを登録する。
  • それから、HKEY_LOCAL_MACHINE\software\microsoft\Internet Explorer\Toolbarに、"{coclass のCLSID}"という名前の値を登録する。型や中身はどうでもいいみたい?

IObjectWithSiteの実装はこんな感じ。

  • ツールバーがactivateされるとき、 IObjectWithSite#SetSite が呼ばれる。パラメータのIUnknownインターフェースは、IOleWIndowをquery可能なので、これを使ってツールバーの親となるウィンドウの情報を取得する。MSDNのサンプルでは、このタイミングでツールバー本体のウィンドウを生成している。
  • また、IInputObjectSiteもquery可能なので、あとで入力を処理するときにこれを使う。
  • それから、単にツールバーとして表示されると言うだけでなく実質的な機能を提供するなら、このIUnknownでIWebBrowser2をqueryするのは必須。
  • IObjectWithSite#GetSiteは単にSetSiteで渡されたIUnknownのQueryInterfaceに転送すればいいらしい。

IPersistStreamは、ツールバーの状態を保存するために適切なタイミングでIEがメソッドを呼んでくれるので、それを考えてよしなに実装。空実装してもとりあえずは問題なし。

IDeskBand::GetBandInfoはバーの大きさやらなんやらの情報を提供するMSDNのサンプルみたいな感じで適当に。