タブ式エクスプローラ

真魚やエロペガと同様に、自分で毎日使ってる自作ソフトで、裏エクスプローラというのがある。
グローバルフックという手法で標準のエクスプローラを捕まえて、タブ式にしてしまおうというもの。
同じコンセプトで親エクスプローラというのも作ったのだが、親も裏も完全に思い通りには動作せず、
親よりは裏の方が、少しは理想に近い動作をするということで、裏の方をずっと使い続けてきた。

自宅のPCでは、64bit版Vistaを入れているわけだが、別にVistaが好きで使ってるわけじゃなく、
嫌いだけどVistaを知るためにVistaを使っているわけで、嫌いなVistaを好きにカスタマイズするのではなく、
なるべく標準の状態で使わないと、今あえてVistaを使ってみている意味もなくなる。
だから、自宅のPCはあえて、裏エクスプローラを使わないで、標準のエクスプローラに慣れようとした。
だが、そろそろ標準にも慣れたし、それでも裏エクスプローラが必要だと感じ、遂に自宅でも使ってみた。

ところが、裏エクスプローラの起動は出来ているのに、エクスプローラの捕獲だけうまく行かない。
そこから紆余曲折あったのだが、どうやら、64bitアプリの捕獲だけがうまく行ってないようだ。
調べてみると、エクスプローラや64bit版IEにはグローバルフックが反応せず、
その他のアプリにはXPまでと同様に反応しているので、きっとそういうことだろう。
つーことは、64bitで裏エクスプローラを作り直せば、64bitアプリだけに反応するものが作れるだろうと予想。
ということで戦いは始まった。

裏エクスプローラはDelphi製だが、Delphiはまだ64bitに対応していない。
次回のバージョンアップではユニコード対応を予定しているが、64bit対応はさらにその先だ。
そんなもんは待ってられないので、Delphiで作る言う方向はナシ。

C♯で作れないかとググってみたら、.NETでグローバルフックは使えない事らしい。
グローバルフックにはアンマネージDLLとEXEが必要で、アンマネージDLLを作る事が出来ないんだと。
じゃぁDLLだけDelphiで作り、EXEをC♯で作ればいい。
つーことで、裏エクスプローラに使っているDLLをC♯アプリのEXEで呼び出すことは成功した。
ただし、C♯アプリを32bitでビルドした場合だけだ。
64bitでビルドした場合は、やはりDLLも64bitにする必要があるのか、全く動作しない。

64bitでDLLを作るということで、DelphiコードをVC++に移植した。
移植したものをまずは32bitでビルドし、裏エクスプローラのDLLと交換してみたら、これはうまく動作した。
しかし、64bitでビルドして、C♯の64bitビルドと組み合わせると全然動作しない。
C++もC♯も、32bitを64bitに変更しただけなのだが、それじゃダメらしい。

つーことで今はお手上げ状態。
C++で64bitのDLLを作る際に注意する点でもあるのか、
それともC♯の方に問題があるのか、そもそも64bit化すれば本当にうまく行くのかもわからない。
夢中になりすぎて寝不足なので、この件は健康を考えて、あまりのめり込まないようにしたい。
グローバルフックを追いかけること自体をもうやめるべきかも。

そこでさらに話が続く。
どうせVistaのエクスプローラは嫌いなので、他の最初からタブ式なファイラーを使う方が便利かも。
今までもタブ式ファイラーは作ろうと計画していたわけだが、
XPまでのエクスプローラは使いやすいし、しかもDelphiがユニコード対応していない事もあって、
自作のファイラーを作るよりは、標準のエクスプローラを捕まえた方が圧倒的に良かった。
しかし64bit版Vistaでは、エクスプローラの捕獲が出来ないし、エクスプローラ自体が不便だし、
作っても良いかなと思い始めている。
既に存在しているファイラーを探して使う事も含めて検討。

たぶん関連のある記事:

コメントは終了しています。