Es gibt zwei Möglichkeiten Icons aus EXE, DLL und ICO Dateien zu extrahieren: mit API Funktion
ExtractIcon und mit API Funktion
ExtractAssociatedIcon.
Das ist ein Beispiel wie es mit
ExtractIcon geht:
Bei ExtractIcon können nur Icons aus den oben angegebenen Dateien extrahiert werden, d.h. die Datei muß Icon enthalten. Die Funktion kann in zweifacher Weise genutzt werden:
- den Icon einer Datei extrahieren;
- auslesen wieviel Icons die Datei enthällt
Zuerst müssen man also erfahren wieviele Icons in der Datei drinn sind. Wird eine höhere Zahl angegeben wie es Icons gibt, dann wir
kein Icon zurückgegeben.
Funktion zum Auslesen der Icon Anzahl:
Die Funktion erwartet ein Parameter:
- Dateiname einer EXE, DLL oder ICO Datei
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| uses ShellApi;
function TotalNumberOfIcons(const FileName: String): Integer; begin if not FileExists(FileName) then Result := -1 else Result := ExtractIcon(HInstance, PChar(FileName), $FFFFFFFF); end; |
Korrekturhinweis von
JayK.
Funktion zum Extrahieren eines Icon's:
Die Funktion erwartet drei Parameter:
- Dateiname einer EXE, DLL oder ICO Datei
- Index des gewünschten Icons (0 für das erste Icon)
- TIcon Objekt für Übergabe des Icons
Die Funktion gibt True zurück wenn alles geklappt hat und False wenn entweder die Datei nicht existiert hat oder der Index-Wert falsch war.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| uses ShellApi;
function GetIconFromFileA(const FileName: String; Index: Word; Icon: TIcon): Boolean; begin Result := False; if (TotalNumberOfIcons(FileName) < 1) or ((Index + 1 ) > TotalNumberOfIcons(FileName)) then Exit;
Icon.Handle := ExtractIcon(HInstance, PChar(FileName), Index); Result := True; end; |
Beispiele:
Beispiel 1:
Icon aus Explorer.exe extrahieren und auf Formular zeichnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var AIcon: TIcon; begin AIcon := TIcon.Create; try if GetIconFromFileA('c:\windows\explorer.exe', 0, AIcon) then ShowMessage('Alles klar'); Canvas.Draw(0, 0, AIcon); finally AIcon.Free; end; end; |
Beispiel 2:
Icon extrahieren und als Formular-Icon nehmen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); begin if GetIconFromFileA('c:\windows\explorer.exe', 0, Icon) then ShowMessage('Alles klar'); end; |
Moderiert von jasocul: Fehler im Source korrigiert. 23.10.2005