procedure GetFileIcon(const AFileName: string; AIcon: TIcon);
var
H, I: Integer;
S: string;
reg: TRegistry;
begin
S := GetFileType(AFileName);
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;
if (S <> '') and reg.OpenKey(S + '\DefaultIcon', False) then S := reg.ReadString('');
if S = '' then S := 'Shell32.dll';
I := Pos(',', S);
if I > 0 then
begin
H := StrToInt(Copy(S, I + 1, Length(S) - I));
S := Copy(S, 1, I - 1);
I := H;
end
else
I := 0;
AIcon.Handle := ExtractIcon(Hinstance, PChar(S), I);
finally
reg.Free;
end;
end;