Как получить иконку рабочего стола? - PullRequest
1 голос
/ 07 февраля 2020

Я хочу получить значки из некоторых системных каталогов, например «Рабочий стол». Однако вместо этого я получаю значок «файл по умолчанию».

function GetSpecialFolderPath(CSIDLFolder: Integer): string;
var  FilePath: array [0..MAX_PATH] of char;
begin
  SHGetFolderPath(0, CSIDLFolder, 0, 0, FilePath);
  Result := FilePath;
end;

function GetSystemFileIcon(FolderID: Integer): TIcon;
var
  AInfo: TSHFileInfo;
  AIcon: TIcon;
  Ext: PAnsiChar;
  Path: String;
begin
  Path := GetSpecialFolderPath(FolderID);

  if Path = '' then begin
    Result := nil;
    Exit;
  end;  

  if SHGetFileInfo(PChar(Path), FILE_ATTRIBUTE_NORMAL, AInfo, SizeOf( AInfo ),
    SHGFI_ICON or SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_OPENICON ) <> 0 then
  begin
    AIcon := TIcon.Create;
    try
      AIcon.Handle := AInfo.hIcon;
      Result := AIcon;
    except
      AIcon.Free;
      raise;
    end;
  end
  else
    Result := nil;
end;

var Ico: TIcon;
begin
  Ico :=  GetSystemFileIcon(CSIDL_DESKTOPDIRECTORY);

1 Ответ

1 голос
/ 07 февраля 2020

Этот атрибут необходимо удалить:

SHGFI_USEFILEATTRIBUTES

, тогда он работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...