//请自行添加到 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文件图标(已修正)的更多相关文章

  1. VC6.0生成的exe文件图标

    以下是我网上收到的方法 我都试过 成功不了 具体说下我遇到的问题 VC6.0生成的exe文件图标是用Icon下几个图标中value值最小的,顺序为IDR_MAINFRAME.IDR_ICONTETYP ...

  2. C语言Win32 Application 的标题栏图标,任务栏图标,exe文件图标问题

    我们这里新建的首先是一个空工程,新建c文件. 因为是空工程,我们没有资源文件,要用到图标资源,首先要新建和导入图标为资源. 选择引入资源,选择要引入的ico文件 完成,重命名保存Script_icon ...

  3. 直接读取修改exe文件

    1. 前言 配置器的编写有很多的方式,主要是直接修改原始的受控端的程序,有的方式是把受控端和配置信息都放到控制端程序的内部,在需要配置受控端的时候直接输入配置信息,生成受控端:也有的方式是在外部直接修 ...

  4. Qt设置生成的exe文件图标

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_37354286/article/d ...

  5. Python文件.py转换为.exe可执行程序,制作.exe文件图标

    当大家想要将自己写的Python程序对别人进行展示的时候,你是否还是打开你的Pycharm进行运行展示? 假如是专业的人士看你的代码,一眼就能看懂你的代码,而其实我们可以不需要给代码,利用pyinst ...

  6. 动态修改PE文件图标(使用UpdateResource API函数)

    PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program ...

  7. windows系统exe文件图标变成了白色无图标

    转载:https://blog.csdn.net/whatday/article/details/52658412   在命令提示符下输入下列命令即可恢复.   按键 “WIN+R” 输入即可cmd ...

  8. exe文件图标不见了,教你win10桌面EXE文件图标不见了如何解决

    1.进入cmd 2.输入以下命令 taskkill /im explorer.exe /f cd /d %userprofile%\appdata\local del iconcache.db /a ...

  9. 第三篇--如何修改exe文件版本号和文件信息

    控制台程序添加版本信息方法: 项目右键 Add-->Resource-->选择Version-->new,然后就可以修改里面的信息了,重新编译一下就OK.

随机推荐

  1. Redux和react-redux的学习总结

    写在最前面:这段时间一直在看前端方面的东西,之前只是了解HTML,CSS,JS,jQuery,由于公司交代了前端的任务,所以后面又看了Bootstrap,React,Redux,react-redux ...

  2. 数据结构与算法之PHP排序算法(归并排序)

    一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...

  3. 使用VMware新建一个Linux系统虚拟机(全)

    我们将其分为两步,1:新建虚拟机:2:安装Red Hat Enterprse Linux 6操作系统 1.首先我们新建一个虚拟机,先不安装操作系统,稍后再对其安装Linux系统. 新建虚拟机步骤如下: ...

  4. labeled statement:标签语句

    foo: for (var i=0; i< 5; i++) { for (var j=0; j<5; j++) { if ( i == j ) { // 跳到 foo 的下一个循环 // ...

  5. 曾经觉得学习晦涩难懂的我是如何爱上linux的

    2016年冬天,我已经是一名学习计算机科学与技术专业的大三的“老腊肉”了,但是当时的水平依旧平平.就在2016年快要结束的时候,我周围的同学们被一股考研和工作的压力炸开了锅,我也在默默思考着我的人生, ...

  6. 告诉你们!我是怎么与Linux系统接触的!

    最开始接触Linux是在15年来北京后,刚来北京机缘巧合,从事了实施工程师的工作.实施工作是一个面很广的工作.业务.技术.沟通等等方方面面的.技术一直是我是的短板.刚开始,公司在要在阿里云上部署APP ...

  7. >HTML编辑笔记2

    1.列表 ①无序列表 <ul> <li>XXX</li> <li>XXX</li> </ul> ②有序列表 <ol> ...

  8. ln 链接命令 简要说明 软硬链接关系说明

    ln [选项] 目标 -s 创建符号链接(软链接) -f 强制创建链接 -i 覆盖前先询问 -v 显示创建链接过程 ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接经常被用到 删除软链接 ...

  9. Problem D: 平面上的点——Point类 (IV)

    Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定.现在我们封装一个“Point类”来实现平面上的点的操作. 根据“append.cc”,完成Point类的构造方 ...

  10. Makefile中的%标记和系统通配符*的区别

    Makefile中的%标记和系统通配符*的区别在于,*是应用在系统中的,%是应用在这个Makefile文件中的. (本文的测试环境是Windows7下使用MinGW提供的make.exe) 例如,如果 ...