我正在使用SHGetFileInfo
来获取特定文件类型的图标。 MSDN讲述了SHFILEINFO
:
图标
类型:HICON
代表文件的图标的句柄。你负责
当您不再使用DestroyIcon销毁此手柄时
需要它。
要从HIcon获取图标,我使用Icon.FromHandle
。同样,MSDN说:
备注
使用此方法时,必须丢弃原始图标
通过使用Win32 API中的DestroyIcon方法来确保
资源被释放。
更加令人困惑的是,SGHFI_ICON
描述包含以下信息:
SHGFI_ICON(0x000000100)
检索代表文件的图标的句柄和
系统映像列表中图标的索引。手柄是
复制到psfi指定的结构的hIcon成员中,
并将索引复制到iIcon成员。
从此描述看来,操作系统似乎保留了该句柄,我实际上不应该销毁它。
然后我的问题是:如果是(如果是),什么时候应该丢弃图标句柄?
Icon.FromHandle()
之后吗? Icon.FromHandle()
创建的图标时? (在这种情况下,我想我宁愿复制图标,释放原始图标并返回副本,以避免句柄泄漏)最佳答案
系统不保留图标句柄,而是保留图像列表。使用SHGFI_ICON
标志时,SHGetFileInfo
通过针对系统映像列表调用ImageList_GetIcon
来创建图标。您可以通过传递SHGFI_SYSICONINDEX
标志来自己完成此操作,而只检索图标索引。
完成使用后,该图标应销毁。