//请自行添加到 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. netty-socketio(一)之helloworld,与springboot整合

    netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架. 1.参考资料 (1)netty-socketio项目github地址: https:/ ...

  2. 【Mybatis】【1】generate批量生成实体类,数据库接口类和mapper

    前言: 1,实体类之类如果自己写的话,比较繁琐,还容易出错,所以用generate自动生成 2,int类型可能会生成为short类型,建议不要手动改回int类.因为下次生成又是short类型了,可能会 ...

  3. ALV基础二:ALV的扩展功能

    https://www.cnblogs.com/sapSB/p/8532072.html 参考这个,做扩展,有些人喜欢用OO ALV有些喜欢用普通的CALL FUNC ALV...我只用LVC... ...

  4. ThinkPHP5.0源码学习之执行应用

    一.应用启动 在/thinkphp/start.php文件中,用一句代码App::run()->send();实现应用的启动. // 执行应用 App::run()->send();   ...

  5. python -- 内置模块02

    1.os 所有和操作系统相关的内容都在os模块,一般用来操作文件系统 import os os.makedirs('dirname1/dirname2') # 可生成多层递归目录 os.removed ...

  6. Python—字符编码转换、函数基本操作

    字符编码转换 函数 #声明文件编码,格式如下: #-*- coding:utf-8 -*- 注意此处只是声明了文件编码格式,python的默认编码还是unicode 字符编码转换: import sy ...

  7. jvm-垃圾收集

    概述 说起垃圾收集,大部分人都把这项技术当做Java语言的伴生产物.其实,GC主要就是考虑完成三件事情: 哪些内存需要回收 什么时候回收 如何回收. 经过半个多世纪的发展,目前内存的动态分配与内存的回 ...

  8. 关于数据安全RSA,MD5,TOKEN

    网络上明文传输时 1.数据可能被窃取:2.数据可能被篡改:3.数据被泄露 如何解决: 1.数据被窃取是由于数据能随意的被拿到,且能够被识别.可以有2个方式解决 a.使数据不能随意被获取: 使用toke ...

  9. ChinaCock界面控件介绍-TCCBarcodeCreator

    条码生成器,可以生成各种条码,包括二维码.这是一个不可视控件.用起来依旧简单. 属性说明: BarCodeColor:生成条码的颜色 BarcodeFormat:生成条码的类型,支持的条码类型: Bo ...

  10. 关于Error during managed flush [Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1]错误

    控制台报错: 08:07:09.293 [http-bio-8080-exec-2] ERROR org.hibernate.internal.SessionImpl - HHH000346: Err ...