Ich benutze folgende Funktion um an den ShellIconindex zu kommen:
Delphi-Quellcode:
function TServer.GetShellIcon(FileName: string): integer;
var
SHFileInfo: TSHFileInfo;
begin
Result := 0;
//Falls ein Laufwerksbuchstabe übergeben wurde...
if Length(FileName) = 1 then
FileName := FileName + ':';
//Laufwerke sollten mit \ enden...
if (Length(FileName) = 2) and (copy(FileName, length(FileName), 1) = ':') and
(copy(FileName, length(FileName), 1) <> '\') then
FileName := FileName + '\';
//Dateiino lesen...
ShGetFileInfo(PChar(FileName), 1, SHFileInfo, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);
//IconIndex liefern...
Result := SHFileInfo.iIcon
end;
Das funktioniert bei 99,9% aller Dateien wunderbar, nur z.B. bei *.htm Dateien wird das Defaulticon (unbekannte Datei) anstelle des korrekten Icons (wie im Explorer dargestellt) zurückgeliefert...