获取外壳图标的最快方法



我使用这段代码来获取shell图标(显示在Windows资源管理器中的图标)
有没有人有更快获得这些图标的经验?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;

谢谢!

也尝试使用SHGFI_USEFILEATTRIBUTES标志。有关详细信息,请参阅文章Tuning SHGetFileInfo for Optimum PerformanceWhat does SHGFI_USEFILEATTRIBUTES mean?

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