我正在使用此代码获取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;
谢谢!
答案 0 :(得分:8)
尝试使用 SHGFI_USEFILEATTRIBUTES 标志。有关详细信息,请参阅文章Tuning SHGetFileInfo for Optimum Performance
和What does SHGFI_USEFILEATTRIBUTES mean?
。
答案 1 :(得分:3)
当我使用SHGetFileInfo时,我使用了缓存。除非它是.exe或.ico文件(可能还有一些),否则相同文件扩展名的图标将相同,因此当您显示目录列表时,您可以对相同类型的文件使用相同的图标不必再次打电话(等待)SHGetFileInfo。