Я хочу получить значки из некоторых системных каталогов, например «Рабочий стол». Однако вместо этого я получаю значок «файл по умолчанию».
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);