Windows XP に付いている検索機能は、ファイル名だけじゃなくファイルの中身も検索してくれる機能も付いている。 ただ、この検索機能は java ファイルを始め、いくつかのファイルの中身をうまく検索してくれないことがあり、オレ的にはちょっと信用できない機能だった。

ところが、レジストリの設定をちょっと変えるだけでうまく動くことを会社の同僚に教えてもらった。 Microsoft の Knowledge Base にもまとめられているので、そこの情報を引用すると…

“ファイルに含まれる単語または句” 検索条件が機能しない
他のファイルの種類について、この問題を解決するには、検索するファイルの種類に対応したフィルタを登録するプログラムをインストールします。フィルタを提供するプログラムがない場合は、代わりにプレーン テキスト フィルタを使用できます。これを行うには、HKEY_CLASSES_ROOT キーにあるファイルの種類のキーの下に PersistentHandler キーを追加し、その (既定) 文字列の値に次の値を設定します。

{5e941d80-bf96-11cd-b579-08002b30bfeb}

警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。

たとえば、.zzz ファイルに対してテキスト フィルタ プロバイダを使用する場合は、次のレジストリ設定が必要です。

HKEY_CLASSES_ROOT.zzzPersistentHandler(Default) = {5e941d80-bf96-11cd-b579-08002b30bfeb}

この値をレジストリに追加した後、いったんログオフしてログオンし直します。これで変更が有効になります。

フィルタという名前なのでエンジンというよりもっとシンプルなモノだとは思うが、Windows XP の検索機能も Mac OS X の Spotlight のように、ファイルタイプに応じて検索方法を切り替えていたと知ってびっくり。 単純にファイル内のテキストを検索する grep のようなモノだと思っていた。

Windows のファイルタイプは拡張子で决まるので、検索がうまくいかない場合は、その拡張子のレジストリのところに検索エンジンとして暗号のようなテキスト検索エンジンのIDを指定すればいいというわけだ。

普段は Eclipse の Search 機能を使っているんだけど、Eclipse を起動してないときや、起動するほどでもないちょっとした検索などに使えそう。 本来は Java のインストーラーが検索ハンドラをセットしてくれればいいんだけど、まぁ仕方がないか。

他にも .pl, .pm や .php なんかもこの設定がされてない可能性が高い。 そんなときはレジストリの設定を見てみたらうまく検索できるようになるかも。