« 「フォルダの参照」ダイアログのコントロールID | トップページ | 命名規則の悩ましさ »

2010年9月30日 (木)

ファイルに関連付けられたアイコンの取得

滅多に使用する事ではないが、ファイルに関連付けされたアイコンを表示したい場合、.NET Framework2.0以降であれば、簡単に取得出来る。この取得の仕方については、@ITの.NET TIPS 「ファイルに関連付けられたアイコンを取得するには?[2.0のみ、C#、VB]」に書かれている。

おお、これは便利と使用してみたが、1つ大きな落とし穴があった。

表示した16*16のアイコンが、エクスプローラに表示されている小さなアイコンと良く似ているものの、微妙に違うのである。例えば、.cs ファイル。エクスプローラだと、の様になり、Icon.ExtractAssociatedIcon メソッドによる表示では、となる。文字の"C#"が"CF"に見えませんか?
自分の場合、冒頭に紹介したサイトの例と違い、ListView に表示する関係で、取得したアイコンはイメージリストに格納するだけで、表示自体は ListView が勝手に行なっている。アイコンイメージのストレッチが行われている事に気付くのに、ちょっと時間がかかってしまった。

つまり、Icon.ExtractAssociatedIcon メソッドは、大きなアイコンしか取得しない様である。メソッド自体が、アイコンの大きさを指定するパラメータをもたないから、当然といえば、当然なのだが。
とにかく、これには困った。大抵のアイコンは、大きなアイコンも小さなアイコンも、デザイン内容自体は同じにしているので、微妙に違う(または判らない)といった程度なのだが、私のところでは、大きなアイコンと小さなアイコンの内容がかなり違うアイコンを使用した関連付けも行っていた。こいつを表示すれば、はっきりと大きなアイコンの方を小さいサイズで表示しているのが、わかってしまった。

結局、Win32API のAssocQueryString → SHGetFileInfoを使用するオーソドックスな(?)方法に落ち着いたのでした。今回、Win32API にも同名の ExtractAssociatedIcon(Ex) がある事を知ったが、こちらも引数パラメータを見る限り、大きいアイコンしか取得出来なさそうですね。これなら1行だけで済むのですが...はぁ~、無念。

« 「フォルダの参照」ダイアログのコントロールID | トップページ | 命名規則の悩ましさ »

.NET情報」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ファイルに関連付けられたアイコンの取得:

« 「フォルダの参照」ダイアログのコントロールID | トップページ | 命名規則の悩ましさ »