Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: 24x24, 40x40, 48x48, 60x60, ... Icons auslesen

  Alt 16. Nov 2005, 20:46
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat