ファイルごとにアイコンを変える への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 NTS  (社会人)
投稿日時
2011/9/24 16:53:21
例えば、abc という拡張子のファイル 123.abc があるとします。それは関連付けされていて、中身はINIファイルです。
[MAIN]
Version=1.0
ファイルの内容が↑の時に、アイコンの右下に "1.0" と表示させることはできるのでしょうか?
やりかたを教えてください。
簡単に言えば、VisualStudioのプロジェクトファイルみたいな物です。
[MAIN]
Version=1.0
ファイルの内容が↑の時に、アイコンの右下に "1.0" と表示させることはできるのでしょうか?
やりかたを教えてください。
簡単に言えば、VisualStudioのプロジェクトファイルみたいな物です。
IconHandler や IExtractIcon といったキーワードで検索してみてください。
http://msdn.microsoft.com/en-us/library/cc144067%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/cc144122%28VS.85%29.aspx
上記の手順に従い、IExtractIcon(とIPersistFile)を実装した COM の DLL を作成し、
それをレジストリに登録してください。IPersistFile は最低限 Load さえ実装すれば OK。
Vista 以降では IInitializeWithFile / IInitializeWithStream もあると良いかも知れません。
拡張子に対して、自作アイコンハンドラーのDLL を登録しておくと、OS 側から、
まず IExtractIcon.GetIconLocation メソッドが呼び出されるようになります。
このメソッドの pwFlags に GIL_NOTFILENAME (=&H8) を返すようにすると、さらに
IExtractIcon.Extract メソッドが呼びだされますので、ここでアイコンを返却します。
アイコンの返却には、アイコンハンドル(HICON)が必要です。この部分は Icon クラスの
Handle プロパティを使っても良いですし、LoadIcon API 等で取得してもよいかと思いますが、
確実なのは LoadIcon の方だと思います。
この手の処理は、インターフェイスの処理途中で不具合があると、エクスプローラーを
巻き込んでクラッシュすることもあるので、十分に注意してくださいね。