ファイラーのまとめ

 今回のシリーズはいかがだったでしょうか。COMインターフェイスとなると「ActiveX」とか「コントロールパネル」だとかの「インターフェイスを作る」ことが中心の解説が多いと思うので、今回のような「使う」ことだけを目的とした解説は結構希少価値があるような気がします。
 では、最後に気がついたことを細々と。

永遠のライバル……タスクスケジューラー
 タスクスケジューラー、Scheduled Tasksというフォルダには泣かされました。このフォルダを指し示すIShellFolderからRelease()を呼び出すと、見事にアクセス違反が発生してしまうのです。ちゃんと動いてるはずなのに、です。
 一応解決策として、タスクスケジューラーはIEnumIDList::Next()の第3引数に2以上が返ってくるようなので、その部分をチェックしてなんとか切り抜けています。

 ただ、筆者の環境は「IE4をアンインストールしたのにタスクスケジューラーだけ残った」状況なので、特殊なのかもしれません。

落ちる!!
 95を使っているせいかもしれませんが、とにかく何度となく落ちました。ただ、デバッグ時にのみ落ちるようなので、どうやらMSDEVのバグらしいです。
 起きる現象として……。
・ブレークポイントで止まったまま
・文字列変数の中身を見ると凍る
・デバッグ中いきなりMSDEVが落ちる
・フォルダで「名前の変更」を行うとエクスプローラーが異常終了
 とにかく最後のが一番困りました。かなりあっさり死んでくれます。でもこれ、本当にMSDEVのバグなんでしょうか、それとも単に「運がいい」だけなんでしょうか。でも他でも同じような話を聞くし……。

ファイル名の処理
 ファイルをそのままショートカットにする場合には、ファイル名を加工する必要があります。
 例えばフルパスをそのままショートカットのファイル名にする場合には、:や¥をそのまま使うことができません。これらの文字を置き換えたり消去する必要がああります。
 また、拡張子を残すかどうかも問題です。Test.txtというファイルだったら、Test.txt.lnkとするのか、拡張子を取ってTest.lnkとするのか、ということです。
 こういった細かい処理もアプリケーション側で行わなければならないでしょう。

 それにしても、「ファイル名には次の文字は使えません」の中の,;が使えちゃうのはなんでなんでしょうね。

APIとインターフェイス
 さて、ここまでCOMインターフェイスを使ったファイラーについて解説してきましたが、実際のところ「できるだけAPIを使った方がいい」というのが筆者の結論です。

 FindFirstFile()を使った検索は、拡張子別検索、フォルダとそうでないものを区別しての検索など、細かく高速に検索できます。インターフェイスを使ったものに比べて比較的使いやすく便利だと言えます。
 インターフェイスには「デスクトップなどにもシームレスに移動できる」という利点がありますが、はっきり言ってそれだけのような気がします。

 そこで、筆者としてのお薦めは
・ファイルひとつひとつの管理はアイテムIDリストを使用する
・ファイル検索は、パスではAPI、ネームスペースではインターフェイスを使用する
 というものです。ファイル管理をアイテムIDリストで行うことで、フォルダ間のシームレスな移動、アイコンの取得などを楽に行います。ファイル検索ではIEnumIDListとFindFirstFile()を使い分けます。後者では、取得したパスからアイテムIDリストを生成して管理します。
 その他、部分ごとにAPIとインターフェイスを使い分けることが必要でしょう。

 当然、これはかなり管理が大変になります。が、筆者の感想はインターフェイスだけの力ワザはヤバイというものです。特にスピードの点でかなり問題が発生します。その他、フォルダごとに細かい設定なども必要になってきます。
 なんでこんなことが問題になるかというと、「エクスプローラーが良くできている」ということに尽きるでしょう。エクスプローラーはシェルの一部であり、これ自体インターフェイスになっているため、当然の如く最適の表示方法を行うことができます。
 自分でファイラーを作るとなると、この部分を追いかけていかなくちゃいけないわけで、その辺が非常に辛くなってきます。特にIE4との統合、98の登場、そういったものに完璧に対応するのはほぼ不可能でしょう。
 それでも対応したいというのであれば、やはり細かい処理が必要になってきます。マイコンピューターはドライブ順に並べる、ハードディスク以外へのリンクはチェックしない、ファイル数が多いフォルダは記憶しておく、各フォルダごとに検索優先順位を変える、デスクトップでは実際のアイコン並び順にする……きりがありません。

まとめ
 筆者はある意味、「COMインターフェイスに幻想を抱いていた」のかもしれません。しかし、実際は違いました。はっきり言って解らないことだらけです。
 でも、それはただ単に知らないだけなのかもしれません。それに、これからもどんどん変わっていくでしょう。

 ただひとつだけ言えること、それは「ファイラーは存在し得ない」ということでしょう。ファイルのような形をしているけれどもファイルでないもの、そういったものを扱えるアプリケーションが求められているからこそ、インターフェイスを使い、ファイラーを作製しようとしました。が結果的にそこにあるのは「ファイラー」ではない別のものでした。そして気付くのです、「エクスプローラーはファイラーではない」のだと。

 今回のシリーズを終えて、「見えない実体の影を追い続けてきた」ような奇妙なむなしさが残りました。いわばこれは「OSの手のひらで踊る」ようなものです。
 それでも、たとえ永遠に追いつくことができないと分かっていても、作製したアプリケーションが何らかの形でユーザーの役に立てると信じているのなら……このシリーズが助力になればと思います。

 
(C)KAB-studio 1998 ALL RIGHTS RESERVED.