获取shell图标的最快方法

Mar*_*ner 7 windows delphi shell winapi icons

我正在使用此代码获取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;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gar*_*ett 8

尝试使用SHGFI_USEFILEATTRIBUTES标志.请参阅文章Tuning SHGetFileInfo for Optimum PerformanceWhat does SHGFI_USEFILEATTRIBUTES mean?更多信息.

  • +1,一系列快速测量(获取文件图标信息10k次)证实了我最好的建议(从大约18s到11s).我的建议(使用shell图像列表)调整到大约.10s,其中大约0.5s采取图像列表句柄的初始获取. (2认同)