Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

HICON: Vom Handle zum Struct und umgekehrt

  Alt 19. Apr 2011, 16:38
Hey,

ich habe mir eine kleine Unit geschrieben, welche Icons aus einer EXE extrahieren und als Icon speichern kann. Ebenso kann ich eine Icon Resource anhand einer Icon Datei einer EXE hinzufügen. Intern verwende ich folgende Strukturen:
Delphi-Quellcode:
// RESOURCE ICON HEADER

type
  PResIconEntry = ^TResIconEntry;
  TResIconEntry = packed record
    bWidth: Byte;
    bHeight: Byte;
    bColorCount: Byte;
    bReserved: Byte;
    wPlanes: Word;
    wBitCount: Word;
    dwBytesInRes: DWord;
    nID: Word;
  end;

  PGroupIconHeader = ^TGroupIconHeader;
  TGroupIconHeader = packed record
    idReserved: Word;
    idType: Word;
    idCount: Word;
    idEntries: Array[0..31] of TResIconEntry;
  end;

// FILE ICON HEADER

type
  PIconEntry = ^TIconEntry;
  TIconEntry = packed record
    bWidth: Byte;
    bHeight: Byte;
    bColorCount: Byte;
    bReserved: Byte;
    wPlanes: Word;
    wBitCount: Word;
    dwBytesInRes: DWord;
    dwImageOffset: DWord;
  end;

  TPageInfo = packed record
    Width: Byte;
    Height: Byte;
    ColorQuantity: Integer;
    Reserved: DWord;
    PageSize: DWord;
    PageOffSet: DWord;
  end;

  TIcoFileHeader = packed record
    FileFlag: Array[0..3] of Byte;
    PageQuartity: Integer;
    PageInfo: TPageInfo;
  end;

  PIconHeader = ^TIconHeader;
  TIconHeader = packed record
    idReserved: Word;
    idType: Word;
    idCount: Word;
    idEntries: Array[0..0] of TIconEntry;
  end;
Ich zeige die extrahierten Icons in einem ListView an. Nun möchte ich allerdings gerne den Weg über die Festplatte und LoadImage() vermeiden. Weiß also jemand, wie ich meine Structs nun zu einem HICON konvertieren könnte und umgekehrt?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat