フォルダのアイコン変更方法は、書くまでもなく、プロパティのカスタマイズタブから出来るわけだが、これで出来るDesktop.ini を別のフォルダにコピーしてもそのフォルダのアイコンに変化は無い。何が違うのか?GUIでなくスクリプトでこの操作をしたいときはどうすればいいのか?
コマンドプロンプトから、attrib /s /d コマンドでアイコンを変更したフォルダの属性と、変更されていないフォルダの属性を比べてみると、変更した方は読み取り専用属性がセットされていることがわかった。
C:\temp>attrib /s /d SH C:\temp\A\Desktop.ini R C:\temp\A
Desktop.ini をコピーしたフォルダの属性を attrib +r コマンドで変更してみると、一瞬ののちにフォルダアイコンが変化する!
いろいろやってみてわかった結果のまとめ
- プロパティのカスタマイズタブでフォルダアイコンを変更すると、フォルダに「読み取り専用属性」がセットされDesktop.iniファイル(システムファイル属性、隠し属性)が出来てその中にアイコン画像の情報が書かれる
- 同じ方法で「規定値に戻す」を行っても、フォルダの属性はそのままで、Desktop.iniも削除されない。中身のアイコン画像情報が削除されるだけ
- Desktop.iniを所定の書式で作成して、フォルダの「読み取り専用属性」をattribコマンドでセットするとフォルダアイコンが変化する
- どちらかの方法でフォルダアイコンを変更した後で、Desktop.iniのアイコン画像情報を書き換えてもその時点ではフォルダアイコンは変化しない
- そのフォルダアイコン情報を反映させるにはそのフォルダを一度別フォルダに移動するか、「読み取り専用属性」をリセットしてセットし直す
- フォルダプロパティの「読み取り専用属性」のチェックボックスをチェックして適用してもフォルダの「読み取り専用属性」は変化しない。つまりExploreでは「読み取り専用属性」をセットできない。リセットも出来ない
- SysInternalsのfilemon*1で、ExplorerがどういうケースでDesktop.iniを見に行くのか調べると、フォルダが「読み取り専用属性」もしくは「システムファイル属性」を持つときである
関係ないが、filemon出力を見ていて気づいたこと
Expoloreでフォルダを表示すると、どこであろうかそこにDropboxがアクセスに行く。同期対象フォルダ以外に用はないはずなのに、何故だ?
*1:最新版では他のいくつかのモニターと統合されてprocmonになっている