本文整理自网络,侵删。
添加资源,就算里面没有该ID所代表的资源也没问题。
function UpdateRes(AUpdate: Cardinal; AResID: Integer; ARes: string): Boolean;
var
fs: TFileStream;
pBuffer: PByte;
begin
fs := TFileStream.Create(ARes, fmOpenRead);
try
fs.Position := 0;
GetMem(pBuffer, fs.Size);
try
fs.Read(pBuffer^, fs.Size);
Result := UpdateResource(AUpdate, MAKEINTRESOURCE(RT_RCDATA),
MAKEINTRESOURCE(AResID), MAKELANGID(LANG_NEUTRAL, LANG_NEUTRAL),
pBuffer, fs.Size);
finally
FreeMem(pBuffer, fs.Size);
end;
finally
FreeAndNil(fs);
end;
end;
bRet := False;
hUpdate := BeginUpdateResource(PChar(edt3.Text), False);
if hUpdate <> 0 then
try
bRet := UpdateRes(hUpdate, 100, edt1.Text);
finally
EndUpdateResource(hUpdate, False);
end;
读取资源。
procedure ExtractResAndRun(AName: string; AResID: Integer);
var
Res: HRSRC;
iRes: Integer;
hResData: HGLOBAL;
pBuffer: PByte;
ms: TMemoryStream;
begin
Res := FindResource(HInstance, MAKEINTRESOURCE(AResID), RT_RCDATA);
if Res <> 0 then
try
iRes := SizeofResource(HInstance, Res);
if iRes = 0 then Exit;
hResData := LoadResource(HInstance, Res);
if hResData = 0 then Exit;
pBuffer := LockResource(hResData);
if pBuffer <> nil then
try
ms := TMemoryStream.Create;
try
ms.SetSize(iRes);
ms.Write(pBuffer^, iRes);
ms.SaveToFile(AName);
if FileExists(AName) then
ShellExecute(0, ‘open’, PChar(AName), nil, nil, SW_SHOWNORMAL);
finally
FreeAndNil(ms);
end;
finally
UnlockResource(hResData);
end;
finally
FreeResource(Res);
end;
end;
来源 http://www.hicpp.com/code/338.html
相关阅读 >>
Delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法
Delphi idmessage1 idsmtp1 发送邮件支持https
更多相关阅读请进入《Delphi》频道 >>