用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.
随机推荐
- dedecmsv5.7 前台模版里输出变量
如何在PHP文件查询出来的数据赋值给前端页面展示出来? 例如: PHP文件:agency.php require_once(dirname(__FILE__) . '/../../include/co ...
- 数据分析库之Numpy
Numpy get started NumPy中我们要学习的核心其实就是一个 ndarray n多 d dimension 维度 array数组 多维数组 创建一个ndarray的几种方法 impor ...
- Java中如何设置表格处于不可编辑状态
代码片段如下: 这样的话就可以将表格设置为不可编辑状态
- linux配置redis三种启动方式
下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压 tar -xzf redis-4.0.9.tar.gz -C /usr/ ...
- XSS/XSRF
一.XSS 1.1 xss的含义 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 ...
- 垃圾收集器(GC)
堆分区:所有new的对象都会存放在堆中 > 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为Fro ...
- Vuejs的$nextTick原理
本质: nextTick,本质上是一个异步API,表示当前同步流程执行完成后再调用传入的函数. 根据环境不同,异步API的实现可以分别通过: setTimeout(0), new Promise(), ...
- jq demo 轮播图,图片可调用,向上,自动+鼠标点击切换
1 <!doctype html> <html> <head> <meta http-equiv="Content-Type" conte ...
- 8.7 C++二进制文件读写操作
参考:http://www.weixueyuan.net/view/6413.html 总结: 二进制文件的读写稍微麻烦一些,对二进制文件的读写同样需要打开文件和关闭文件,打开和关闭方式与文本文件相同 ...
- Centos7修改分区空间
一:缩小/home空间 1.1:备份/home内容 cp -r /home/* /homebak 1.2:删除挂载/home umount /home 1.3:删除/home所在lv lvremove ...