delphi-动态修改exe文件的图标.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

delphi-动态修改exe文件的图标

end;var

Form1:TForm1;implementation{$R*.dfm}procedureTForm1.Button2Click(Sender:TObject);

begin

Close;

end;procedureTForm1.Button1Click(Sender:TObject);

const

readlen=10;//每次读取字节数,可改变

icolen=766;//32*32图标长度,根据研究前126为图标头,后640为图标数据

var

i,j,itemp,nPos:int64;//nPos为目的图标在目的文件的位置

ci,cj:array[0..readlen-1]ofchar;

SourceFile,DestFile:string;//如果要把记事本图标换成瑞星杀毒软件图标

bOK:boolean;//则SourceFile=C:\windows\notepad.exe,DestFile:=C:\Progra

mFiles\rising\rav\ravmon.exe

SourceIcon,DestIcon:TIcon;

SIconStream,s,sDest:TMemoryStream;

begin

bOK:=false;

ifOpenDialog1.Executethen

SourceFile:=OpenDialog1.FileName

else

exit;

ifAnsiUpperCase(ExtractFileExt(SourceFile)).EXEthen

begin

ShowMessage(AnsiUpperCase(ExtractFileExt(SourceFile)));

exit;

end;

Edit1.Text:=SourceFile;

ifOpenDialog2.Executethen

DestFile:=OpenDialog2.FileName

else

exit;

ifAnsiUpperCase(ExtractFileExt(DestFile)).EXEthen

exit;

Edit2.Text:=DestFile;

SourceIcon:=TIcon.Create;

caseExtractIcon(handle,PChar(SourceFile),UINT(-1))of

0:

beginShowMessage(源程序没有图标);

exit;

end;

1:;

else

ShowMessage(源程序有多个图标,本程序选择第一个图标);

end;

SourceIcon.Handle:=ExtractIcon(handle,PChar(SourceFile),0);

//选择第一个图

DestIcon:=TIcon.Create;

//选择第N个图标为ExtractIcon(handle,PChar(Source

file),N-1)

caseExtractIcon(handle,PChar(DestFile),UINT(-1))of

0:

beginShowMessage(目的程序没有图标);

exit;

end;

1:;

else

ShowMessage(目的程序有多个图标,本程序选择第一个图标替换);

end;

DestIcon.Handle:=ExtractIcon(handle,PChar(DestFile),0);//选择第一个图标

SIconStream:=TMemoryStream.Create;

DestIcon.SaveToStream(sIconStream);

ifsIconStream.sizeicolenthen

ShowMessage(SIcon.sizeicolen);

SDest:=TMemoryStream.Create;

sDest.LoadFromFile(DestFile);

i:=0;

j:=0;//以下程序查找目的图标在目的程序中的位置

whileisDest.sizedo

begin

itemp:=i;

j:=126;

{repeat

SDest.Position:=i;

sDest.read(ci,Readlen);

SiconStream.Position:=j;

SIconStream.Read(cj,Readlen);

i:=i+Readlen;

j:=j+Readlen;

until(String(ci)=String(cj))and(isDest.size)and(jico

文档评论(0)

158****1866 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档