前段时间我曾要求fastest way to get shell icon调整了获取图标的速度,但问题是某些系统快捷方式(lnk文件)无法显示正确的图标。
其中一个示例可能是Windows Fax and Scan.lnk
文件,如果您使用以下代码...
procedure TForm2.Button1Click(Sender: TObject);
var
Icon: TIcon;
FileInfo: TSHFileInfo;
begin
FillChar(FileInfo, SizeOf(FileInfo), 0);
SHGetFileInfo(PChar('C:\Windows Fax and Scan.lnk'), FILE_ATTRIBUTE_NORMAL,
FileInfo, SizeOf(FileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or
SHGFI_SMALLICON);
Icon := TIcon.Create;
try
Icon.Handle := FileInfo.hIcon;
Canvas.Draw(10, 10, Icon);
finally
Icon.Free;
end;
end;
显示而不是此图标...
某种默认快捷方式图标......
您知道如何从该快捷方式文件中获取系统图标(第一张图像中的图标)吗?
答案 0 :(得分:1)
SHGFI_USEFILEATTRIBUTES
尝试不访问磁盘,这意味着您可以告诉它在没有该文件实际存在的情况下查找a.txt
并仍然为您提供.txt文件的通用图标。安装this之类的东西可能无法给出正确的结果,这需要调用自定义图标处理程序并可能访问磁盘。由于.lnk文件存储了图标的位置,因此如果不访问磁盘(不包括可能的缓存),则无法访问此信息。
IExtractIcon比SHGetFileInfo快,但如果你真的想要速度,你应该显示通用图标并在后台线程上获得真实的图标......