Hi ...
Nee, hift leider nicht, denn es wird immer 32x32 zurückgegeben,
auch wenn das Icon höhere Auflösungen enthält. Ich glaube das
muss über GetIconInfo ablaufen.
Das
Handle auf mein Icon in meiner gewünschten Auflösung bekomme ich so:
(aus den 'Abgründen' des Internets)
Delphi-Quellcode:
function GethIcon(FileName:
String; icoSize: Cardinal; icoIndex: integer = 0): Cardinal;
var DeskTopISF: IShellFolder; IExIcon: IExtractIcon; PathPidl: PItemIDList; hIconL, hIconS: HIcon;
begin
Result := 0;
{this function uses the IExtractIcon to get an e.g. 48x48 icon Handle
from a file that Has the Icon Bitmaps in it, like an Icon File (.ICO),
an executable (.EXE) and a library (.DLL)}
if SHGetDesktopFolder(DeskTopISF) <> NOERROR
then Exit;
PathPidl :=
nil;
if DeskTopISF.GetUIObjectOf(0, 1, PathPidl, IID_IExtractIconA,
nil, IExIcon) <> NOERROR
then Exit;
if (IExIcon.Extract(PChar(FileName), icoIndex, hIconL, hIconS,
icoSize
or (16
shl 16)) = NOERROR)
and (hIconL <> 0)
then Result := hIconL;
DestroyIcon(hIconS);
end;
Das funktioniert (leider) auch, wenn die entsprechende Datei kein Icon in meiner gewünschten Auflösung besitzt. Windows vergrößert das Icon dann und das möchte ich (in besserer Qualität) lieber selber machen.
Hinterher geht das wohl nicht mehr, deshalb möchte ich irgendwie vorher erfragen ob z.B. ein 48x48-Icon enthalten ist und falls nicht, dann lese ich lieber das 32x32-Icon aus und vergrößere es selber (per gr32)
Dankbar für jeden weitern Ansatz, grüßt ...