获取shell图标的最快方法

我正在使用此代码来获取shell图标(在Windows资源pipe理器中显示的图标)。
有没有人有更快的方式获得这些图标的经验? SHGetFileInfo似乎很慢。

 procedure TForm2.Button1Click(Sender: TObject); var FileInfo: TSHFileInfo; begin FillChar(FileInfo, SizeOf(FileInfo), 0); if SHGetFileInfo(PChar('c:\windows\'), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX) <> 0 then DrawIconEx(Canvas.Handle, 10, 10, FileInfo.hIcon, 0, 16, 16, 0, DI_IMAGE or DI_MASK); end; 

谢谢!

Solutions Collecting From Web of "获取shell图标的最快方法"

尝试使用SHGFI_USEFILEATTRIBUTES标志。 请参阅文章Tuning SHGetFileInfo for Optimum Performance以及What does SHGFI_USEFILEATTRIBUTES mean? 了解更多信息。

当我使用SHGetFileInfo时,我使用了一个缓存。 除非它是一个.exe或.ico文件(可能还有更多),否则该图标对于相同的文件扩展名将是相同的,所以当您显示一个dir列表时,您可以对同一类型的文件使用相同的图标,而您不必再次调用(并等待)SHGetFileInfo。