木
木柯
Unregistered / Unconfirmed
GUEST, unregistred user!
我用以下代码实现替换某个程序中的位图,运行后,可以替换其他程序里的位图,却发现了一个很奇怪的问题:比如说我把 kk.exe 中的第100号图片换成一个小猫, 用ResHacker可以查看kk.exe中第100号为小猫,但是同样用exeScope就不能打开100号位图,提示说流读取错误。代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
FS:TFileStream;
bufferchar;
hUpdateRes:THandle;
Result:boolean;
begin
if OPenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OPenPictureDialog1.FileName);
FS:=TFileStream.Create(OPenPictureDialog1.FileName,fmOPenRead);
GetMem(buffer,FS.Size);
FS.Read(buffer^,fs.Size);
Edit1.Text:=IntToStr(mm);
hUpdateRes:=BeginUpdateResource(Pchar(OpenDialog1.FileName),false);
if(hUpdateRes=0) then
begin
MessageBox(0,pchar('Error to begin update resource.'),pcha (Application.Title),MB_ICONERROR);
exit;
end;
result:=UpdateResource(hUpdateRes,RT_BITMAP,MAKEINTRESOURCE(100),1033,buffer,fs.Size);
if result = false then
Messagebox(0,'Error','',MB_IconInformation+MB_OK);
if not EndUpdateResource(hUpdateRes,false) then
begin
MessageBox(0,pchar('Error to end update resource.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
FreeMem(buffer);
fs.Free;
result:=true;
end;
end;
而且那个小猫的图片无法再用LoadBitmap(Hpic,MAKEINTRESOURCE(i)) 取出来。
请教各位到底是那里出了问题呢? 请各位不吝赐教。
procedure TForm1.Button1Click(Sender: TObject);
var
FS:TFileStream;
bufferchar;
hUpdateRes:THandle;
Result:boolean;
begin
if OPenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OPenPictureDialog1.FileName);
FS:=TFileStream.Create(OPenPictureDialog1.FileName,fmOPenRead);
GetMem(buffer,FS.Size);
FS.Read(buffer^,fs.Size);
Edit1.Text:=IntToStr(mm);
hUpdateRes:=BeginUpdateResource(Pchar(OpenDialog1.FileName),false);
if(hUpdateRes=0) then
begin
MessageBox(0,pchar('Error to begin update resource.'),pcha (Application.Title),MB_ICONERROR);
exit;
end;
result:=UpdateResource(hUpdateRes,RT_BITMAP,MAKEINTRESOURCE(100),1033,buffer,fs.Size);
if result = false then
Messagebox(0,'Error','',MB_IconInformation+MB_OK);
if not EndUpdateResource(hUpdateRes,false) then
begin
MessageBox(0,pchar('Error to end update resource.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
FreeMem(buffer);
fs.Free;
result:=true;
end;
end;
而且那个小猫的图片无法再用LoadBitmap(Hpic,MAKEINTRESOURCE(i)) 取出来。
请教各位到底是那里出了问题呢? 请各位不吝赐教。