Hier mal die ganze Funktion, mit der man das Icon, die Beschreibung und den Typnamen eines Pfades oder einer Datei ermitteln kann:
Code: Alles auswählen
const SHGFI_ICON = $000000100;
SHGFI_DISPLAYNAME = $000000200;
SHGFI_TYPENAME = $000000400;
SHGFI_SMALLICON = $000000001;
procedure GetFileInfos(Path : string; var Description : string; var TypeName : string; var myIcon : TIcon);
var fileInfo : TSHFileInfo;
myIconInfo: TIconInfo;
myBitmap: TBitmap;
begin
if not Assigned(myIcon) then myIcon := TIcon.Create;
Description := '';
TypeName := '';
if length(Path) = 1 then Path := Path + ':';
if Pos(PathDelim, Path) = 0 then Path := Path + PathDelim;
if SHGetFileInfo(PChar(Path), 0, fileInfo, sizeof(FileInfo), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_DISPLAYNAME or SHGFI_TYPENAME) <> 0 then begin
if (fileInfo.hIcon <> 0) and GetIconInfo(fileInfo.hIcon, myIconInfo) then begin
try
if GetObject(myIconInfo.hbmColor, SizeOf(myBitmap), @myBitmap) <> 0 then begin
myIcon.CreateFromBitmapHandles(myIconInfo.hbmColor, myIconInfo.hbmMask, Types.Rect(0, 0, myBitmap.bmWidth, myBitmap.bmHeight));
end;
finally
DeleteObject(myIconInfo.hbmMask);
DeleteObject(myIconInfo.hbmColor);
end;
end;
Description := FileInfo.szDisplayName;
TypeName := fileInfo.szTypeName;
end;
end;
Description enthält unter Vista die eingedeutschten Namen der Verzeichnisse. Beispiel Findfirst/Findnext ermittelt alle Verzeichnisse von der Systemplatte. Das Verzeichnis Benutzer erscheint in der ermittelten Liste als "User". Jetzt einfach den Pfad an die oben genannte Funktion übergeben und Description enthält bei der Rückgabe den lokalisierten Namen dieses Verzeichnisses.
Viele Grüße
Hitzi