Delphi-Quellcode:
uses ShellAPI, Math;
function GetFileIcon(AFileName: String; ASmall: Boolean = True; AIndex: Integer = 0): HIcon;
var
LDummy: HIcon;
LInfo: TSHFileInfo;
begin
LDummy := 0;
If ExtractIconEx(PChar(AFileName), -1, LDummy, LDummy, 0) <> 0 then
begin
If ASmall then ExtractIconEx(PChar(AFileName), AIndex, LDummy, Result, 1)
else ExtractIconEx(PChar(AFileName), AIndex, Result, LDummy, 1);
end else begin
SHGetFileInfo(PChar(SysUtils.ExtractFileExt(AFileName)),
FILE_ATTRIBUTE_NORMAL, LInfo, SizeOf(TSHFileInfo),
IfThen(ASmall, SHGFI_SMALLICON, SHGFI_LARGEICON) or
SHGFI_ICON or SHGFI_USEFILEATTRIBUTES);
Result := LInfo.HIcon;
end;
end;
Die Funktion gibt das Icon-
Handle von jeder beliebigen Datei zurück - wenn die Datei keines besitzt, wird eben das Standard-Windows-Icon geholt. Läuft bei mir auf D2009, sollte aber auch auf anderen laufen ...
Wenn ASmall true ist gibt es an, dass kleine Icons geholt werden (16x16), bei false große (32x32). Warum Windows das so komisch macht und man keine Chance hat an evtl. vorhandene andere Größen ran zu kommen weiß ich net
Ich hoffe das läuft und ist das, was du wolltest
PS: Die Unit Math kann raus, wenn man das "IfThen" umgeht.