用UpdateResource修改EXE文件图标(已修正)
//请自行添加到 Type 处
PICONDIRENTRY = ^ICONDIRENTRY;
ICONDIRENTRY = packed record
bWidth: Byte;
bHeight: Byte;" A% f% ?( F* f' A1 R
bColorCount: Byte;
bReserved: Byte;! l/ c3 ?6 V7 S8 k, z& B9 t0 n
wPlanes: Word;5 Q4 a+ ~: R* O) v
wBitCount: Word;8 u7 R( K! t) W0 W: W
dwBytesInRes: DWORD;, z# G" A ~; Q6 y; x/ y/ j
dwImageOffset: DWORD;+ @$ I' k9 ~: ?( P7 E
end;5 _: [3 z5 g! v7 [ G
! _5 c6 n; a5 Q- R) _5 o1 r
PICONDIR = ^ICONDIR;
ICONDIR = packed record) h- w1 ]1 g, I4 O
idReserved: Word;/ e: c; s: B5 B4 `
idType: Word;. c2 A# {$ i; ~' _& r3 }1 L9 Y
idCount: Word;
idEntries: ICONDIRENTRY;
end;
PGRPICONDIRENTRY = ^GRPICONDIRENTRY;# ^) H; S; q: g
GRPICONDIRENTRY = packed record; ^' }6 ~6 n4 d: t
bWidth: Byte;
bHeight: Byte;) h; A0 [% V0 q
bColorCount: Byte;
bReserved: Byte;4 K4 U& c, J7 q X4 s
wPlanes: Word;3 i; k) U) Z! u
wBitCount: Word;# r, o y, N* a" Y# z x
dwBytesInRes: DWORD;4 V6 l; |, p. X2 f% V9 i+ l: \
nID: Word;
end;
PGRPICONDIR = ^GRPICONDIR;5 n% _. G/ t& {% H% o0 [
GRPICONDIR = packed record
idReserved: Word;
idType: Word;
idCount: Word;
idEntries: GRPICONDIRENTRY; ) w+ y$ y- G) V1 E+ N
end;
////////////////////////////////////////////// P1 Y, {4 h0 O# a6 _8 O# _3 v
//函数说明:修改EXE图标
//! u% R! F5 H8 W. e- d& @
//参 数:IconFile 图标文件
// ExeFile 被修改的EXE文件
//
//返回值: 成功为True,否则False. R& @9 g! e6 [# a0 }$ w
/////////////////////////////////////////////5 f6 G2 i$ ?- B$ Q. l; s0 v
function ChangeExeIcon(IcoFile, ExeFile: string): Boolean;: s/ ^3 n- e# }) S+ e
var0 B) [6 h* t' n6 k- P
stID: ICONDIR;/ d& i! e# e* H& w% b: D* Y4 H: m4 C
stGID: GRPICONDIR;
/ Z( Z6 g. M& s/ A7 T7 P
pGrpIcon: PBYTE;
pIcon: PBYTE;0 `" i" F2 V2 \% L
hUpdate: DWORD;
nSize, nGSize: DWORD;
hFile: THandle;9 q6 f& q& e' X" W7 i
dwReserved: DWORD; * i' i) M/ C9 B3 g' B
ret: Boolean;
begin
Result := False;
hFile := CreateFile(PChar(IcoFile), GENERIC_READ, 0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);/ {$ E8 r* K. K/ o7 s4 \$ F' l+ [
if hFile = INVALID_HANDLE_VALUE then
Exit;
& y9 T; e' {5 `: a
try
ReadFile(hFile, stID, Sizeof(ICONDIR), dwReserved, nil);+ N; B: v" Z4 T C, v
nSize := stID.idEntries.dwBytesInRes;, I, W: y+ }5 P* I7 p
GetMem(pIcon, nSize);
SetFilePointer(hFile, stID.idEntries.dwImageOffset, nil, FILE_BEGIN);" `! C9 q' j& ^ p
ReadFile(hFile, pIcon^, nSize, dwReserved, nil);# C5 ~. v. Q; p1 s4 _
6 q8 K) t! W/ J# Z5 L
stGID.idType := 1;
stGID.idCount := stID.idCount;
stGID.idReserved := 0;$ D9 T$ j3 A' M7 v1 ~
CopyMemory(@stGID.idEntries.bWidth, @stID.idEntries.bWidth, 12);
stGID.idEntries.nID := 0;
nGSize := Sizeof(GRPICONDIR);2 Z5 l8 d( s0 h6 Y8 N4 A
GetMem(pGrpIcon, nGSize);5 N. a& g t \
CopyMemory(pGrpIcon, @stGID, nGSize);) n: T! u4 X8 L3 Z# G
. y, i% c6 \' n
hUpdate := BeginUpdateResource(PChar(ExeFile), False);( T% w! ~% l, {7 {' S: X9 K( F
try
ret := UpdateResource(hUpdate, RT_GROUP_ICON, MAKEINTRESOURCE(1), 0, pGrpIcon, nGSize);
ret := UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), 0, pIcon, nSize);
finally" j: g7 x4 [* W& n$ t% \
EndUpdateResource(hUpdate, False);
end;3 b2 [) v* s3 F- R: l' T+ O* P/ @2 I& ^
finally$ W# B, i4 L% N" \" ?. }3 ]9 M
CloseHandle(hFile);
end;3 W: l! f( P7 Z/ I6 r
Result := ret; w% Q: d) |4 u: ^. h: U) H
end;
用UpdateResource修改EXE文件图标(已修正)的更多相关文章
- VC6.0生成的exe文件图标
以下是我网上收到的方法 我都试过 成功不了 具体说下我遇到的问题 VC6.0生成的exe文件图标是用Icon下几个图标中value值最小的,顺序为IDR_MAINFRAME.IDR_ICONTETYP ...
- C语言Win32 Application 的标题栏图标,任务栏图标,exe文件图标问题
我们这里新建的首先是一个空工程,新建c文件. 因为是空工程,我们没有资源文件,要用到图标资源,首先要新建和导入图标为资源. 选择引入资源,选择要引入的ico文件 完成,重命名保存Script_icon ...
- 直接读取修改exe文件
1. 前言 配置器的编写有很多的方式,主要是直接修改原始的受控端的程序,有的方式是把受控端和配置信息都放到控制端程序的内部,在需要配置受控端的时候直接输入配置信息,生成受控端:也有的方式是在外部直接修 ...
- Qt设置生成的exe文件图标
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_37354286/article/d ...
- Python文件.py转换为.exe可执行程序,制作.exe文件图标
当大家想要将自己写的Python程序对别人进行展示的时候,你是否还是打开你的Pycharm进行运行展示? 假如是专业的人士看你的代码,一眼就能看懂你的代码,而其实我们可以不需要给代码,利用pyinst ...
- 动态修改PE文件图标(使用UpdateResource API函数)
PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program ...
- windows系统exe文件图标变成了白色无图标
转载:https://blog.csdn.net/whatday/article/details/52658412 在命令提示符下输入下列命令即可恢复. 按键 “WIN+R” 输入即可cmd ...
- exe文件图标不见了,教你win10桌面EXE文件图标不见了如何解决
1.进入cmd 2.输入以下命令 taskkill /im explorer.exe /f cd /d %userprofile%\appdata\local del iconcache.db /a ...
- 第三篇--如何修改exe文件版本号和文件信息
控制台程序添加版本信息方法: 项目右键 Add-->Resource-->选择Version-->new,然后就可以修改里面的信息了,重新编译一下就OK.
随机推荐
- 【分布式搜索引擎】Elasticsearch写入和读取数据过程
一.Elasticsearch写人数据的过程 1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)2)coordinating node,对docum ...
- eclipse 运行 mapreduce程序报错 No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
报错信息 17/07/06 17:00:27 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Ap ...
- android --------- 嵌套unity出现 your hardware does not support this application,sorry!
最近遇见一个这个的问题 ,我在Android端接入Unity3D时出现的问题 问题是打开app直接弹出下面的弹框 点击ok 就退出了 遇到这样的问题 是因为libs文件夹的so文件出现了问题: 解决办 ...
- dedecms 在模版页面获取当前栏目id
在模版中单独调用当前栏目id {dede:type}[field:ID /]{/dede:type} 在{dede:sql}中调用当前栏目id {dede:sql sql='Select * from ...
- 『TensorFlow』单&双隐藏层自编码器设计
计算图设计 很简单的实践, 多了个隐藏层 没有上节的高斯噪声 网络写法由上节的面向对象改为了函数式编程, 其他没有特别需要注意的,实现如下: import numpy as np import mat ...
- 使用npm install时一直报错-4048 operation not permitted
一:权限问题 首先看到operation not permitted我们能想到权限问题,所以这时候我们可以以管理员身份运行cmd或者直接快捷键Win+X来打开. 二:依赖包错误 如上图,根据错误日志我 ...
- JDBC数据库连接工具
什么是JDBC? JDBC是一种可以执行sql语句的Java API,提供对数据库的访问方法. 什么是JDBC驱动? JDBC连接数据库需要驱动,驱动是两个设备要进行通信,满足一定的数据驱动格式.一般 ...
- fiddler抓取用tomcat来部署的项目接口请求包
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888. 当Fiddler退出的时候它会自动注销, 这样就不会影响别的程序.关于fiddler这个工具的使 ...
- css美化页面
css美化页面 如果在我们一行文字中,想让某个文字凸显出来,使用span! 1.字体样式 font-style:字体的风格 italic normal font-weight:字体的粗细 normal ...
- java基础知识点学习
基础学习总结 1.锁sync/lock都有哪些方法,底层实现 synchronized ['sɪŋkrənaɪzd] 2.线程池的参数.线程池执行的流程,当到达线程池到达最大数,队列也满了,出现的异常 ...