フォルダーのアイコンはimageres.dllからNo.01918
Az さん 11/09/20 03:34
 
こんにちは。
つい、今しがた、一部のWindows7を32bitから64bitに変えてみたのです
が、私は、
C:\Windows\System32\imageres.dll
をカスタマイズして、フォルダーのアイコンを形や色をカスタマイズし
ています。

32bitのほうは、上記のパスのimageres.dllを差し替えることによって、
秀丸ファイラーも、Windows7標準のファイラーも(あと別のサードパー
ティのファイラーも)、フォルダのアイコン(秀丸ファイラーでいいま
すと、フォルダーツリーやファイル一覧の詳細時のアイコン)は、
imageres.dllをカスタマイズしたものが反映されていました。

しかし、64bitのimageres.dllを差し替えても、秀丸ファイラーだけが
フォルダーツリーやファイル一覧の詳細時等のアイコンが変わりません。
Windows7標準のエクスプローラーやサードパーティのファイラーは全て
imageres.dllでカスタマイズしたフォルダアイコンになっています。

秀丸ファイラーは、フォルダなどのアイコンは別のDLLから呼び出して
いるのでしょうか?
それとも64bit版だけimageres.dllではないフォルダを読み込むように
なっているのでしょうか?(32bitの秀丸ファイラーではimageres.dll
のカスタマイズどおりに反映されていましたので)

もし、imageres.dllではないDLLからフォルダを呼び出したりしている
のでしたら、それはどこから呼び出しているのか教えていただけますと
助かります。
もしくは、フォルダの一部などは、テンポラリーとしてキャッシュが
表示されるようになっているのでしょうか?

いずれにしましても、imageres.dllの内容を変えますと、Windows7に
しても他のファイラーや、ファイラーだけではなくフォルダを表示する
ソフトウェアはすべて置き換わったimageres.dllのフォルダーを表示
しますので、それがスタンダードだと思っていましたものですから、
ちょっと困惑してしまい、このようなご質問をさせていただきました。

[ ]
RE:01918 フォルダーのアイコンはimageresNo.01922
Az さん 11/09/20 11:56
 
追記です。
ちなみに、秀丸ファイラーでも、縮小版の表示にするとimageres.dllで
差し替えたフォルダーになるようです(大きいアイコンでフォルダーの
中が透けて見える、あれです。)

でも、その他の表示(並べて、アイコン、一覧、詳細)では、やはり
imageres.dllものではないフォルダーアイコンが表示されてしまいます。

(秀丸エディターのファイラー枠でも、他のソフトやエクスプローラー
同様、imageres.dllのフォルダーなのに、秀丸ファイラーの64bit版だけ
このような感じみたいです。私が今現在試した限りではですが。)

[ ]
RE:01922 フォルダーのアイコンはimageresNo.01926
秀丸担当 さん 11/09/20 13:11
 

>ちなみに、秀丸ファイラーでも、縮小版の表示にするとimageres.dllで
>差し替えたフォルダーになるようです(大きいアイコンでフォルダーの
>中が透けて見える、あれです。)

アイコンの取得は、特にどこのDLLという指定はなくて、OS(シェル)に要求して
返ってきたものを使用しているだけになっています。

64bitと32bitで処理が違うということは無いです。
32bitではできているということで、おそらくOSが持つキャッシュが残っている
という可能性があると思います。
OSのキャッシュを消せれば反映されるかもしれません。

あと、レジストリで指定するアイコンの入れ替えも反映しています。
レジストリエディタでは以下の場所にあるものです。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
Shell Icons
「Shell Icons」で検索すると情報が得られると思います。
以前に問い合わせあったものでは「icolorfolder」というソフトがあって、この
レジストリによる入れ替えを補助するものもあるようです。
これは64bitと32bitでレジストリは別々なので、もしこれに類似するソフトで入
れ替えがされているとしたら、違いが出てくるということはありうると思います。

[ ]
RE:01926 フォルダーのアイコンはimageresNo.01928
Az さん 11/09/20 15:06
 

>64bitと32bitで処理が違うということは無いです。
>32bitではできているということで、おそらくOSが持つキャッシュが残っている
>という可能性があると思います。
>OSのキャッシュを消せれば反映されるかもしれません。

OSのキャッシュ、というのはあまりよく理解できなかったので、ちょっと
私のほうで、比較的な意味合いで、今一度検証してみました。

フォルダーなどのアイコンを差し替えたimageres.dllが反映されるものは
(反映されるものは○で、反映されないものは×とします)

64bitのエクスプローラー:○
64bit版の秀丸ファイラー:×
64bit版のQ-Dir:○
32bit版のMDIE:×

エクスプローラーは標準なので、その下のいくつかのファイラーは
Windows7の64bitにインストールした結果です。

OSのキャッシュということですと、どのファイラー、もしくはコモン
ダイアログでもキャッシュが効いてしまってもおかしくないような
気がしたのです。
上のいくつかの例でいいますとMDIE(これは32bitアプリケーション
だと思います)と秀丸ファイラーだけなのです、この現象は・・・。

あと、先のコメントにありますように、秀丸エディターのファイル
マネージャー枠や、あと、32bitのEmEditorのエクスプローラープラグ
インというのでも、秀丸ファイラーのようにはなりませんでした。
つまり、imageres.dllのアイコンが反映されていました。

ところで、OSのキャッシュというのは、どのような操作で削除できる
のでしょうか? このあたりもよくわからなかったのです。
方法がわかればやってみたいのです。

あと、よくわかりませんが、WOW64のリダイレクトあたりが関係してい
る、ということは・・・・ないのでしょうか?

[ ]
RE:01928 フォルダーのアイコンはimageresNo.01930
秀丸担当 さん 11/09/20 16:26
 

>ところで、OSのキャッシュというのは、どのような操作で削除できる
>のでしょうか? このあたりもよくわからなかったのです。
>方法がわかればやってみたいのです。

「Windows7 アイコンキャッシュ」で検索すると情報が得られるようです。
C:\Users\(ユーザー名)\AppData\Local
の中のIconCache.dbを削除して、新規テキストファイルを作成して、その属性を
読み取り専用にして再起動したらクリアされるようです。
正規の方法としては無いのではないかと思います。

>あと、よくわかりませんが、WOW64のリダイレクトあたりが関係してい
>る、ということは・・・・ないのでしょうか?

32bitアプリでリソースを書き換えると、system32ではなくsyswow64にリダイレ
クトされると思います。

imageres.dllを書き換えること自体正規の方法ではないと思うので、秀丸ファイ
ラーClassicとしてはなんとも言えないところです。
shell32.dllにも同じアイコンがあるようです。
というかimageres.dllは昔は無くて、shell32.dllのほうが昔からあるのでスタ
ンダードっぽいです。(何をもってしてスタンダードと言うのかわかりません
が)

アイコンを入れ替えるにはレジストリの「Shell Icons」のほうを書き換えたほ
うがいいような気がします。

[ ]
RE:01930 フォルダーのアイコンはimageresNo.01939
Az さん 11/09/20 18:29
 
アドバイス、ありがとうございました。

IconCache.dbの削除&読み取りファイル作成後の再起動で、
カスタマイズしたimageres.dllのアイコン群が秀丸ファイラーにも
反映されました。

IconCache.dbでの不具合、わりとポピュラーのようですが、私は何年
もPC使用しているわりには、一度も経験がなかったので、今回勉強に
なりました。

あと、Shell32.dllのほうもいくつか弄っていますが、そちらは問題
ありませんでした、当初から。レジストリを使わないのは、いくつか
のDLLに含まれるアイコンのうち、DLLまるごと、とかではなくって、
100個あったら数十個ずつ、という変え方をしていて、また、途中で
チェンジするときもあるので、DLLの書き換えのほうがいいかな、と
思って今まで慣習でやってきたからで、あまり深い意味はありません
でした。

いずれにしましても、今回はじめてこのような体験をし、また貴重な
アドバイスをいただけて、結果として良かったような気がしています。
では、失礼いたします。

[ ]