一键修改任何软件的图标无模块

易语言 2020-08-21 19:49:29

一键修改任何软件的图标无模块

.子程序 修改程序图标, 逻辑型
.参数 图标路径, 文本型, , 含有图标的文件,最好是ICO,可能是EXE,或TXT等
.参数 程序路径, 文本型, , 希望更换图标的EXE文件
.局部变量 提取图标路径, 文本型, , , 提取后的图标路径
.局部变量 提取程序路径, 文本型, , , 将提取的EXE文件路径
.局部变量 返回值, 逻辑型
.局部变量 图标数据, 字节集
.局部变量 图标缓冲数据, 字节集
.局部变量 stID, ICONDIR
.局部变量 stIDE, ICONDIRENTRY
.局部变量 stGID, GRPICONDIR
.局部变量 更新文件句柄, 整数型
.局部变量 图标文件号, 整数型

.判断开始 (到大写 (取文本右边 (图标路径, 4)) = “.ICO”)
提取图标路径 = 图标路径
.判断 (到大写 (取文本右边 (图标路径, 4)) = “.EXE”)
提取图标路径 = 取运行目录 () + “\TEMP.ICO”
提取资源文件图标 (图标路径, #接口常量.到文件, 提取图标路径, )
' 写到文件 (图标路径, 临时图标)
.判断 (到大写 (取文本右边 (图标路径, 4)) = “.LNK”)
提取程序路径 = 删首尾空 (取快捷方式目标 (图标路径))
调试输出 (“取快捷方式目标”, 提取程序路径)
提取图标路径 = 取运行目录 () + “\TEMP.ICO”
提取资源文件图标 (提取程序路径, #接口常量.到文件, 提取图标路径, )
.默认
提取程序路径 = 取关联文件名 (图标路径)
调试输出 (“取关联文件名”, 提取程序路径)
提取图标路径 = 取运行目录 () + “\TEMP.ICO”
提取资源文件图标 (提取程序路径, #接口常量.到文件, 提取图标路径, )
.判断结束
调试输出 (“提取图标路径”, 提取图标路径)
图标文件号 = 打开文件 (提取图标路径, 1, 1)
移到文件首 (图标文件号)
RtlMoveMemory3 (stID, 读入字节集 (图标文件号, 6), 6)
RtlMoveMemory4 (stIDE, 读入字节集 (图标文件号, 16), 16)
移动读写位置 (图标文件号, , stIDE.dwImageOffset)
图标数据 = 读入字节集 (图标文件号, stIDE.dwBytesInRes)
stGID.idType = 1
stGID.idCount = stID.idCount
RtlMoveMemory1 (stGID.idEntries, stIDE, 12)
图标缓冲数据 = 取空白字节集 (20)
RtlMoveMemory2 (图标缓冲数据, stGID, 20)
更新文件句柄 = BeginUpdateResourceA (程序路径, 假)
返回值 = UpdateResourceA (更新文件句柄, #RT_GROUP_ICON, 1, 0, 图标缓冲数据, 20) ' 22
返回值 = UpdateResourceA (更新文件句柄, #RT_ICON, 1, 0, 图标数据, stIDE.dwBytesInRes)
EndUpdateResourceA (更新文件句柄, 假)

查找与一个指定文件关联在一起的程序的文件名。可用Windows注册表编辑器将文件类型与特定的应用程序关联到一起。比如,扩展名为.TXT的文本文件通常与Windows记事本(Notepad.exe)关联到一起。如在文件管理器中双击含.TXT扩展名的一个文件,会自动启动记事本,并在其中载入文本文件
' 返回值
' Long,大于32表示成功;31表示不存在文件类型的关联;0表示系统内存或资源不足;ERROR_FILE_NOT_FOUND表示指定的文件不存在;ERROR_PATH_NOT_FOUND表示指定的路径不存在;ERROR_BAD_FORMAT表示执行格式无效
' 参数表
' 参数 类型及说明
' lpFile String,指定要为其查找相关程序的一个文件名或程序名
' lpDirectory String,要使用的默认目录的完整路径
' lpResult String,指定一个字串缓冲区,用于装载可执行程序的名字。注意这个字串预先至少都要初始化成MAX_PATH个字符的长度
关联文件名 = 取空白字节集 (260)
文件名 = 文件全路径
返回值 = FindExecutable (文件名, “”, 关联文件名)
' 调试输出 (文件名, 到文本 (关联文件名), 返回值)
.如果真 (删全部空 (到文本 (关联文件名)) = “” 或 返回值 ≤ 31) ' 如果取出是空,或失败,那么就返回原来的文件名
返回 (文件全路径)
.如果真结束
返回 (到文本 (关联文件名)) ' 否则就返回取到的关联文件名