【发布时间】:2020-08-01 09:09:48
【问题描述】:
我想使用 Delphi 更改以前生成的 EXE 文件的主图标。 EXE 文件也是我使用 Delphi 生成的。但我希望用户能够更改其图标。
我尝试使用 UpdateResource 函数更改 RT_GROUP_ICON 和 RT_ICON,但没有成功:
procedure UpdateExeIcon(Const IconFilename, ExternalExeFilename:string);
var
Stream : TFileStream;
hDestRes : THANDLE;
lpData : Pointer;
cbData : DWORD;
begin
Stream := TFileStream.Create(IconFilename,fmOpenRead or fmShareDenyNone);
try
Stream.Seek(0, soFromBeginning);
cbData:=Stream.Size;
if cbData>0 then
begin
GetMem(lpData,cbData);
try
Stream.Read(lpData^, cbData);
hDestRes:= BeginUpdateResource(PChar(ExternalExeFilename), False);
if hDestRes <> 0 then
begin
//if UpdateResource(hDestRes, RT_ICON,PChar('1'),1033,lpData,cbData) then
if UpdateResource(hDestRes, RT_GROUP_ICON,PChar('MAINICON'),1033,lpData,cbData) then
begin
if not EndUpdateResource(hDestRes,FALSE) then RaiseLastOSError;
end else RaiseLastOSError;
end else RaiseLastOSError;
finally
FreeMem(lpData);
end;
end;
finally
Stream.Free;
end;
end;
【问题讨论】:
-
您何时/在何处得出“没有成功”的结论?还有哪些步骤是成功的?
-
@AmigoJack 该程序确实注入了一些东西,但它并没有改变主图标。
-
Windows 角度的主图标是第一个。使用资源编辑器检查可执行文件以查看发生了什么。与往常一样,解决问题的关键是调试它。
-
刷新图标缓存有用吗? superuser.com/questions/499078/…
-
@W.Chang 不,它不起作用。甚至尝试更改文件名。