AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi HICON: Vom Handle zum Struct und umgekehrt
Thema durchsuchen
Ansicht
Themen-Optionen

HICON: Vom Handle zum Struct und umgekehrt

Offene Frage von "Zacherl"
Ein Thema von Zacherl · begonnen am 19. Apr 2011 · letzter Beitrag vom 20. Apr 2011
Antwort Antwort
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, 17: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
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 19. Apr 2011, 17:56
Wo sind denn die eigentlichen Bilddaten in deinen Strukturen? Ich finde sie nicht.
Wenn die nicht da sind, wird schwierig.
Wenn doch, dann gibts bestimmt einen Weg.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 19. Apr 2011, 18:40
An die Bilddaten kann ich rankommen. Die Structs führen mich da über ImageOffset etc. zu den eigentlichen Bilddaten.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 19. Apr 2011, 20:43
Und in welchem Format kannst du die Daten liefern?

Ich stell so viele Fragen, weil ich mal was ähnliches gemacht habe ... ein PNG in ein Icon gewandelt via MSDN-Library durchsuchenCreateIconIndirect.
Da gibt man eine Icon-Struktur an und bekommt ein HICON hinten raus.
In der Icon-Struktur steckt ein Bitmap und ein paar andere Infos. Das Bitmap müsste man mit den Bilddaten von dir füttern.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 20. Apr 2011, 08:37
Die Funktion sieht auf jeden Fall mal vielversprechend aus. Die einzelnen Icons (Icongrößen) sind soweit ich weiß Bitmaps mit Alpha Channel. Von denen komme ich auf jeden Fall an die RAW Daten aus einem Buffer.

Dann lautet die nächste Frage nun, wie ich das ByteArray vom Bitmap in ein HBITMAP umwandeln kann Ich habe grade noch die MSDN-Library durchsuchenCreateBitmapIndirect API gefunden, die recht gut geeignet scheint.

Ich probiere mal aus, ob ich im Laufe des Tages da was Ordentliches gebastelt bekomme und gebe dann Rückmeldung.

Noch eine Verständnisfrage: Besitzt ein HICON jeweils nur ein Bild? In einer Icon Datei sind ja mehrere Bilder in verschiedenen Farbtiefen und Auflösungen gespeichert.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 20. Apr 2011, 08:46
Wenn du willst, kannst du dir auch die PNGtoIcon aus dieser Unit anschauen ... das ist so in etwa das gleiche, was du auch machen willst.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#7

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 20. Apr 2011, 12:13
Vielleicht helfen GetIconInfo bzw. GetIconInfoEx?
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (20. Apr 2011 um 12:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: HICON: Vom Handle zum Struct und umgekehrt

  Alt 20. Apr 2011, 18:03
Ich habs jetzt ganz einfach gelöst. Mein Ziel war es lediglich Icons aus einer DLL in einem ListView anzuzeigen. MSDN-Library durchsuchenLoadImage bietet genau die Funktionalität, die ich benötige und liefert mir direkt ein HICON
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz