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