SHGetFileInfo特定のファイルタイプのアイコンを取得するために使用しています。MSDN は、について次のように述べていSHFILEINFOます。
hアイコン
タイプ:ハイコン
ファイルを表すアイコンへのハンドル。あなたは責任があります
あなたがもういないときに DestroyIcon でこのハンドルを破棄するため
それが必要。
HIcon からアイコンを取得するには、 を使用しますIcon.FromHandle。繰り返しますが、MSDN は次のように述べています。
備考
この方法を使用する場合、元のアイコンを破棄する必要があります Win32 API の DestroyIcon メソッドを使用して確実に リソースが解放されること。
SGHFI_ICON説明には次の情報が含まれているため、さらに混乱します。
SHGFI_ICON (0x000000100)
ファイルを表すアイコンへのハンドルと
システム イメージ リスト内のアイコンのインデックス。ハンドルは
psfi で指定された構造体の hIcon メンバにコピーされ、
インデックスは iIcon メンバーにコピーされます。
この説明から、ハンドルは OS によって保持されているようで、実際に破棄すべきではありません。
私の質問は次のとおりです。もしそうなら、いつアイコンハンドルを処分する必要がありますか?
- 直後
Icon.FromHandle()? Icon.FromHandle()から作成したアイコンが不要になった場合 (そのような場合、ハンドルリークを避けるために、アイコンをコピーしてオリジナルを解放し、コピーを返すと思います)- 決して (それはどういうわけか自動的に行われますか? SHGetFileInfo の多くの例 - SO であっても - アイコンハンドルを解放するコードは含まれていません)