Programming Field - プログラミング Tips

Trouble: HTML ファイルのアイコンが表示されない

注意

レジストリを扱う際は、上記のデータのみを正しく変更するようにしてください。特に CLSID 以下には重要なデータが数多く含まれるので、間違えて編集や削除をしてしまうと Windows の動作に支障をきたす恐れがあります。もし編集が不安な場合は、レジストリのバックアップを取ってから行うようにしてください。

問題の概要

この問題は、Windows にて HTML ファイルのアイコンが未登録になってしまう現象(下図左から右になる状態)で、ここでは Microsoft Office の導入後に発生しうる問題について扱います。

※ それ以外のアプリケーションの導入においても、Microsoft Office を導入している場合は以下に示す方法で解決できる可能性はあります。

通常の HTML ファイル (IE 7.0) 未登録のアイコンで表示される HTML ファイル

原因

Microsoft Office (Word かな?) は、HTML ファイルのアイコンを HTML ファイルの内容によって変更できるように、ShellEx の IconHandler (ファイル一覧で、ファイルの内容による分類など、動的にアイコンを表示させるときに使用)を HTML ファイルに対して導入します。具体的にはレジストリを以下のように変更します。(問題の部分のみ。表記方法は「Windows レジストリ 解剖記」を参照。「\"」は C/C++, Perl, Java などでよく使われる、" " の中に " を入れるための表記法。)

導入すると、<old-html-icon> に、書き換えられる前に登録されていた HTML ファイルのアイコンが登録されます。このとき、アイコンを記述する際の形式「<path>,<index>」(例: C:\WINDOWS\NOTEPAD.EXE,1)の <path> の部分に「"」が含まれていると、アイコンが未登録の表示になります。例えば、これらのレジストリが書き換えられる前、HTML ファイルのアイコンが「"C:\Program Files\Internet Explorer\IEXPLORE.EXE",-17」と登録されている場合、書き換えられる前まではアイコンは正しく表示されますが、書き換えられると未登録アイコンになります。

なお、書き換えられたあとの「%1」となることに関しては、これはバグやミスではなく、ShellEx の IconHandler を使用する際は必ず DefaultIcon を「%1」に設定する必要があるためこのようになっています。

回避方法

よく紹介される方法は、htmlfile 内の IconHandler を削除して、HTML ファイルのアイコンを登録し直す、つまり htmlfile\DefaultIcon を書き換える、という方法がありますが、これだと何かの拍子に元に戻ってしまう可能性があります。そこで、原因から分かるように、次の方法により問題を解決します。

といっても方法はそんなに難しくなく、レジストリ エディタを起動して、上記の CLSID\{42042206-2D85-11D3-8CFF-005004838597}\Old Icon\htmlfile\DefaultIcon に書かれている内容から「"」を取り除くだけです。(※ Windows 95/98/Me のレジストリ エディタでは値の一覧に表示される値の内容は、最初から「"」で括られています。編集するときは注意してください。)

レジストリ エディタでデータを書き換えた状態

その他

この問題は Windows Me + Office 2000、Windows 2000 + Office XP、Windows XP + Office 2003 で発生しており、そのうち後者の2つでは上記をテストして成功しています。

最終更新日: 2006/12/25