【问题标题】:How to get shortcut shell icon from a system shortcut?如何从系统快捷方式获取快捷方式外壳图标?
【发布时间】:2012-06-14 09:59:17
【问题描述】:

前段时间我问过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;

显示而不是这个图标...

某种默认快捷方式图标...

您知道如何从该快捷方式文件中获取系统图标(第一张图片中的那个)吗?

【问题讨论】:

    标签: delphi winapi explorer windows-shell


    【解决方案1】:

    SHGFI_USEFILEATTRIBUTES 尝试不访问磁盘,这意味着您可以告诉它在该文件实际不存在的情况下查找a.txt,并且仍然为您提供 .txt 文件的通用图标。安装this 之类的东西可能不会给出正确的结果,这需要调用自定义图标处理程序并可能访问磁盘。由于 .lnk 文件存储了图标的位置,因此如果不访问磁盘(不包括可能的缓存),您将无法访问此信息。

    根据 MSDN,IExtractIcon 比 SHGetFileInfo 快,但如果你真的想要速度,你应该显示通用图标并在后台线程上获取真正的图标...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多