![]() |
Wie füge ich Ressourcen einer PE-Anwendung hinzu?
HI,
ich habe mir eine DLL angelegt, in der ich viele nützliche Icons für Verknüpfungen habe, angelegt. Jetzt kommen hin und wieder Icons dazu, die auch in die DLL sollen, ohne dass jedes Mal kompiliert wird. Wie man Ressourcen ändert hab ich schon gefunden. Ein Beispiel für C gibts ![]() Bernhard |
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Wenn es nicht aus Delphi heraus sein muss:
![]() |
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Das Hinzufügen funktioniert genau wie das Ändern mit der Funktion UpdateResource.
|
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Ich hab das jetzt mal probert, aber ohne Erfolg.
Delphi-Quellcode:
Am Ende der Prozedur kommt eine Exception des Typs EPrivilege, die aber von dem Try-Except-Block nicht abgefangen wird, da sie wohl später auftritt. Was hab ich falsch gemacht? Die Ressource ist nicht in der Testanwendung drin.
{1. Open the "*.ico" file with read-only access - CreateFile.
2. Querry the size of the file - GetFileSize. 3. Allocate a buffer for the file - mallloc. 4. Read file into the buffer - ReadFile. } procedure TForm1.Button1Click(Sender: TObject); var Exe: PChar; EHandle: THandle; // hicon: THandle; iconStream: TMemoryStream; iconsize: Cardinal; buffer: Pointer; // dummy: cardinal; begin (* hicon := CreateFile('icon.ico', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); iconsize := GetFileSize(hicon, nil); // für Dateien buffer := AllocMem(iconsize); ReadFile(hicon, buffer, iconsize, dummy, nil);*) iconStream := TMemoryStream.Create; Application.Icon.SaveToStream(iconStream); iconsize := iconStream.Size; iconStream.Position := 0; buffer := AllocMem(iconsize); iconstream.Read(buffer, iconsize); // geladen ? iconStream.Free; Exe := 'Test.exe'; EHandle := BeginUpdateResource(Exe, false); UpdateResource(Ehandle, RT_ICON, 'neuesIcon', LANG_NEUTRAL, Buffer, iconsize); try EndUpdateResource(EHandle, false); except ShowMessage('ERROR'); end; end; @DeddyH: Mit nem Ressource-Hacker kann ich das auch. Es muss (besser: sollte) aber in Delphi sein. Und da ein Ressource-hacker das kann, geht das über Delphi auch. Die Frage ist bloß, wie! Ich hab mir mal deinen Link angeguckt. ![]() Bernhard |
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Icon-Daten sehen als Ressourcen anders aus als auf der Festplatte. Versuche es doch erst mal mit Rohdaten.
|
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Zitat:
Ich hab jetzt mal die Routine mit den Dateidaten probiert. -> Es kommt aber nur die übliche Zugriffsverletzung. Bernhard |
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Icon-Ressourcen haben nicht das selbe Format wie .ico-Dateien. Deshalb kannst du auch nicht einfach einen ResourceStream und die Methode TIcon.LoadFromStream verwenden, um ein Icon aus einer Ressource zu laden.
|
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Zitat:
ok, ich hab jetzt mal geguckt, was ich so mit dem Codeschnipsel anfangen kann. Also hab ich versucht die Datei Project1.cfg (normale Textdatei, von D7 generiert) in meine leere VCL-Exe zu integrieren. (kein Icon, RCData). Dies endete 1x erfolgreich, ließ sich aber nicht mehr reproduzieren. Ich lande nun immer wieder bei der Fehlermeldung: Zitat:
Delphi-Quellcode:
Was läuft da nicht richtig?
procedure TForm1.Button1Click(Sender: TObject);
var Exe: PChar; EHandle: THandle; hicon: THandle; iconStream: TMemoryStream; iconsize: Cardinal; buffer: Pointer; dummy: cardinal; begin hicon := CreateFile({'icon.ico'} 'Project1.cfg', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); iconsize := GetFileSize(hicon, nil); // für Dateien buffer := AllocMem(iconsize); ReadFile(hicon, buffer, iconsize, dummy, nil); (* iconStream := TMemoryStream.Create; iconStream.LoadFromFile('Project1.cfg'); iconsize := iconStream.Size; iconStream.Position := 0; buffer := AllocMem(iconsize); iconstream.Read(buffer, iconsize); // geladen ? iconStream.Free; *) Exe := 'Test.exe'; EHandle := BeginUpdateResource(Exe, false); // <> 0 UpdateResource(Ehandle, RT_RCDATA, 'neuesIcon', LANG_NEUTRAL, Buffer, iconsize); try EndUpdateResource(EHandle, false); except ShowMessage('ERROR'); end; end; Bernhard |
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Icons kannst du nicht einfach über UpdateResource ändern. Das ganze ist nicht trivial. Aber such mal nach IconChanger, da findest du paar Delphi Sourcen.
|
Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Zitat:
Ab welchem Delphi gibts eigentlich eine TRessource (o.ä.) Komponente, die das ändern managed? Im XN Resource Editor wird ja eine entsprechende Komponente verwendet. Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz