Delphi替换PE图标资源
作者:手机用户2502891655 | 来源:互联网 | 2023-05-19 17:14
programProject2;usesWindows,Classes;typeicondirentrypackedrecordbwidth:Byte;该
program Project2;
uses
Windows,Classes;
type
icondirentry=packed record
bwidth:Byte; //该目录对应的资源的宽度
bheight:Byte; //该目录对应的资源的高度
bcolorcount:Byte; //该目录对应的资源的颜色总数,大于8的资源该值为零
breserved:Byte; //保留
wplanes:word; //指定的设备号,如无意外,该值总是为1
wbitcount:word; //该目录对应的资源的位数(色深)
dwbytesinres:Dword; //该目录对应的资源占用的字节数
dataoffset:Dword; //该目录对应的资源在文件中的位置(偏移量)
end;
iconheader=packed record
idreserved:word; //保留
idtype:word; //资源类型,图标文件为1,光标文件为2
idcount:word; //该ico文件中共有几个图标,该值决定了icondirentry结构的数目,可见一个ico文件中可能包含几个图标的数据,替换到exe中要分别考虑。
end;
var
icofile:Tmemorystream;
Uh:Cardinal;
rdata:Pbyte;
header:iconheader;
Dgroup:array of icondirentry;
i,besti,bestc,bestsize:integer;
SourceIcon,TargetFile:String;
begin
SourceIcon:='C:/Program Files/58.ico'; //图标16x16规格
TargetFile:='C:/Program Files/1.exe';
icofile:=Tmemorystream.Create;
icofile.LoadFromFile(Pchar(SourceIcon)); //SourceIcon可以换成ico文件的名称
icofile.Position:=0;
icofile.ReadBuffer(header,sizeof(header));
setlength(Dgroup,header.idcount); //空出一位,防止出错
bestc:=0;
bestsize:=0;
for i := 0 to header.idcount-1 do //忽略空出的一位
begin
icofile.ReadBuffer(Dgroup[i],Sizeof(Dgroup[i]));
if Dgroup[i].wbitcount>bestc then //找到最适合做主图标的图标数据
if Dgroup[i].bwidth>=bestsize then //同上
begin
bestc:=Dgroup[i].wbitcount;
bestsize:=Dgroup[i].bwidth;
besti:=i;
end;
end;
icofile.Position:=Dgroup[besti].dataoffset;
getmem(rdata,Dgroup[besti].dwbytesinres);
icofile.ReadBuffer(rdata^,Dgroup[besti].dwbytesinres);
Uh:=Beginupdateresource(Pchar(TargetFile),false);
updateresource(Uh,RT_ICON,pchar(chr(6)),2052,rdata,Dgroup[besti].dwbytesinres); //替换6号位置
endupdateresource(Uh,false);
icofile.Free;
end.
推荐阅读
-
本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ...
[详细]
蜡笔小新 2024-11-21 13:17:41
-
本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ...
[详细]
蜡笔小新 2024-11-21 11:02:19
-
-
本文介绍了如何解决 ChinaASP.Upload 错误 '80040002',即必须添加版权信息的问题,并提供了详细的步骤和注意事项。 ...
[详细]
蜡笔小新 2024-11-19 15:12:54
-
在现代Web开发中,HTML5 Canvas常用于图像处理和绘图任务。本文将详细介绍如何将Canvas中的图像导出并上传至服务器,适用于拼图、图片编辑等场景。 ...
[详细]
蜡笔小新 2024-11-18 18:04:32
-
首部|接口类型_OSI 7层模型 & TCP/IP协议首部封装格式解析 ...
[详细]
蜡笔小新 2024-11-17 18:56:46
-
本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ...
[详细]
蜡笔小新 2024-11-16 23:50:16
-
Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ...
[详细]
蜡笔小新 2024-11-16 17:48:35
-
探讨在内核中集成头文件的可行性与好处,特别是在处理外部模块和BPF应用时的作用。 ...
[详细]
蜡笔小新 2024-11-20 11:22:06
-
在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ...
[详细]
蜡笔小新 2024-11-20 10:48:37
-
遇到 NPM 脚本 'start' 退出且未显示 create-react-app 服务器正在监听请求的问题,请求帮助。 ...
[详细]
蜡笔小新 2024-11-17 10:35:15
-
网页乱码问题在开发中较为常见,主要由文件编码、程序字符集设置和数据库连接字符集设置不当引起。本文将详细介绍如何逐一排查并解决这些问题。 ...
[详细]
蜡笔小新 2024-11-16 19:06:29
-
在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ...
[详细]
蜡笔小新 2024-11-16 14:59:50
-
《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author:叨陪鲤Email:vip_13031075266163.comDate:2020.1 ...
[详细]
蜡笔小新 2024-11-15 20:32:44
-
java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ...
[详细]
蜡笔小新 2024-11-15 18:21:27
-
如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ...
[详细]
蜡笔小新 2024-11-15 18:04:15
-
手机用户2502891655
这个家伙很懒,什么也没留下!