Leider liefert dir
ExtractIconEx nur die beiden Standardauflösungen, da hast du Recht.
Der Olli hat
hier einen Ressourcen-Lister geschrieben. Wenn du den ausprobierst kannst du mal sehen, wie die Ressourcen in einer
PE-Datei (EXE bzw.
DLL) aufgebaut sind.
Wenn es sich um die Icons aus einer EXE oder
DLL handelt, dann kannst du die mit
LoadLibraryEx(@filename[1], 0, LOAD_LIBRARY_AS_DATAFILE);
laden und dann mit
FindResource,
LoadResource und
LockResource daraus Ressourcen in den Speicher laden.
Eine
RT_GROUP_ICON-Resource (davon gibt's eine für jedes Icon) hat den Aufbau eines
TIconResource (s.u.), allerdings sind genau
Header.idCount Einträge in dem Array (und nicht 100, aber du nimmst ja
PIconResource):
Delphi-Quellcode:
type
TIconDirHdr = packed record
idReserved: word;
idType: word;
idCount: word;
end;
TIconResDirEntry = packed record
bWidth: byte;
bHeight: byte;
bColorCount: byte;
bReserved: byte;
wPlanes: word;
wBitCount: word;
dwBytesInRes: longint;
wIconIndex: word;
end;
PIconResource = ^TIconResource;
TIconResource = packed record
Header: TIconDirHdr;
Entries: packed array [0 .. 99] of TIconResDirEntry;
end;
Dabei bekommst du über
Entries[n].bWidth und
Entries[n].bHeight die Größe des Icons.
Die eigentlich Icons bekommst du dann über den Ressourcen-Typ
RT_ICON und dem Namen
MAKEINTRESOURCE(Entries[n].wIconIndex). Mit der Funktion
CreateIconFromResourceEx kannst du dir aus so einer Ressource direkt ein Icon-
Handle erzeugen lassen.
Wenn es sich um ICO-Dateien handelt, dann schreibe das hier noch einmal - dafür hab' ich ein wenig Code fertig.