AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wie füge ich Ressourcen einer PE-Anwendung hinzu?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie füge ich Ressourcen einer PE-Anwendung hinzu?

Offene Frage von "rollstuhlfahrer"
Ein Thema von rollstuhlfahrer · begonnen am 27. Jan 2009 · letzter Beitrag vom 31. Jan 2009
Antwort Antwort
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#1

Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 27. Jan 2009, 13:24
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 hier. Allerdings wird nicht beschrieben, wie man Ressourcen hinzufügt. Und genau das ist meine Frage: Wie füge ich Ressourcen einer Win32-Anwendung (*.DLL und/oder *.EXE) hinzu?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 27. Jan 2009, 13:26
Wenn es nicht aus Delphi heraus sein muss: Resource Hacker
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 27. Jan 2009, 15:19
Das Hinzufügen funktioniert genau wie das Ändern mit der Funktion UpdateResource.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 27. Jan 2009, 16:18
Ich hab das jetzt mal probert, aber ohne Erfolg.

Delphi-Quellcode:
{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;
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.

@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. Da gibts nen Link auf nen RessourceEditor mit Quelltext. Ich blick da überhaupt nicht durch. Kann auch daran liegen, dass ich nur D7 hab.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 27. Jan 2009, 16:26
Icon-Daten sehen als Ressourcen anders aus als auf der Festplatte. Versuche es doch erst mal mit Rohdaten.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 28. Jan 2009, 07:14
Zitat von Apollonius:
Icon-Daten sehen als Ressourcen anders aus als auf der Festplatte. Versuche es doch erst mal mit Rohdaten.
Sorry, aber ich kann damit nichts anfagen. Was meinst du damit?

Ich hab jetzt mal die Routine mit den Dateidaten probiert. -> Es kommt aber nur die übliche Zugriffsverletzung.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 28. Jan 2009, 17:04
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 31. Jan 2009, 20:34
Zitat von Apollonius:
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.

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 von Delphi Exception:
---------------------------
Project1
---------------------------
Zugriffsverletzung bei Adresse 7C870669 in Modul 'kernel32.dll'. Lesen von Adresse 3841242D.
---------------------------
OK
---------------------------
Code:
Delphi-Quellcode:
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;
Was läuft da nicht richtig?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 31. Jan 2009, 21:11
Icons kannst du nicht einfach über UpdateResource ändern. Das ganze ist nicht trivial. Aber such mal nach IconChanger, da findest du paar Delphi Sourcen.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#10

Re: Wie füge ich Ressourcen einer PE-Anwendung hinzu?

  Alt 31. Jan 2009, 21:30
Zitat von Zacherl:
Icons kannst du nicht einfach über UpdateResource ändern.
Alles andere will auch nicht so recht. Dann werd ich halt immer neu kompilieren müssen.
Ab welchem Delphi gibts eigentlich eine TRessource (o.ä.) Komponente, die das ändern managed?
Im XN Resource Editor wird ja eine entsprechende Komponente verwendet.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  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 23:51 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