アーカイブ

2008年 7月 7日 のアーカイブ

グローバルフックによって、エクスプローラが起動させることを監視することが出来ているわけだが、
WindowsからDLLに通知されるタイミングと、DLLから本体実行ファイルに通知されるタイミングで、
エクスプローラに対して何らかの処理が出来る。
①エクスプローラが起動される直前
②エクスプローラが起動される直前から少し後
③エクスプローラが起動された直後
④エクスプローラが起動された直後から少し後。
と、4つのタイミングに分けられる。
①か②のタイミングで行動を起こそうとすると、OSを巻き込んで固まる事があるので手は出せない。
④のタイミングでだと画面表示後なので、いったんマトモなエクスプローラが表示されてから、
その表示されたエクスプローラを消して、さらにタブに取り込んで表示することになるので、
余計なウィンドウがちらっと表示されてしまう。
処理を③のタイミングでやると、エクスプローラの起動後でかつ画面表示前なので、
ちらっと出ることなく取り込むことが出来るわけだ。

ところが、タブに取り込んだあとにエクスプローラは表示処理をするので、
ウィンドウはタブの中なのに、タスクバーにもエクスプローラが表示されてしまう。
これを回避しつつ、さらにちらっと余計な描画もさせずに取り込むために研究中。

今のところ、③のタイミングでまず非表示化。
④のタイミングで最小化ウィンドウとしていったん表示させ、タブに取り込む。
これなら、ウィンドウは描画されないが、タスクバーにちらっと表示される。
そのあとタブにに取り込むと、タスクバーに表示された分も消える。

XPではこれがうまく行ってるが、64it版Vistaでもうまく行くかどうかまだ検証していない。
.NET開発はクロスプラットフォームがウリだけど、エクスプローラの挙動やVC++のDLLもからみ、
結局は全ての環境で動作確認しなければならず、クロスの恩恵は感じられない。