要获得精确的16x16的Icon而不是用32x32转换来的,你得用ExtractIconEx,
一个完整可用的函数如下:
function GetFileIcon(const aFileName: string; Index: integer; var li,si: TIcon): boolean;
var
l,s: HICON;
begin
Result:=ExtractIconEx(PChar(aFileName),Index,l,s,1)>0;
if Result then
begin
if li=nil then li:=TIcon.Create;
li.Handle:=l;
if si=nil then si:=TIcon.Create;
si.Handle:=s;
end;
end;
其中变参li为大图标(32x32) LargeIcon,si为小图标(16x16)SmallIcon