找回密码
 加入
搜索
查看: 3574|回复: 12

求助:修改dll位图资源

 火.. [复制链接]
发表于 2009-12-28 14:47:59 | 显示全部楼层 |阅读模式
本帖最后由 sky808 于 2009-12-31 03:47 编辑

请问高手们如何修改替换.dll内的资源位图呢
我需要在某dll文件内替换一张.bmp的位图资源。
麻烦高手赐教,多谢!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2009-12-28 15:07:44 | 显示全部楼层
能实现此功能的,必定是熟知exe构成的高手,而这样的高手看到楼主如此的标题和描述大多不作回答,并非他们没有技术传承和资源共享精神,而是没有回答的必要。如果楼主自己都不认真对待自己的问题,何以希望他人能帮助到你。
发表于 2009-12-28 15:32:45 | 显示全部楼层
调用 Resource Hacker
这个软件支持命令行修改程序或DLL 库文件资源!
发表于 2009-12-29 08:52:27 | 显示全部楼层
八个汉字错了俩。。。。
发表于 2009-12-29 08:59:06 | 显示全部楼层
“资源为图、畏途资源”---吓人哦
 楼主| 发表于 2009-12-31 03:45:07 | 显示全部楼层
不是我不认真对待标题,而我根本不知道有错别字.
我是一个盲人,平时只是借助于屏幕朗读器浏览网叶.
麻烦楼上的高人手下留情,别指责我了!
悲!!!!!!

评分

参与人数 1金钱 +200 贡献 +20 收起 理由
afan + 200 + 20 钦佩!

查看全部评分

 楼主| 发表于 2009-12-31 03:53:01 | 显示全部楼层
调用 Resource Hacker
这个软件支持命令行修改程序或DLL 库文件资源!
maxkingmax 发表于 2009-12-28 15:32


请问下有相关的资料吗,搜索了下没找到命令行用法.
多谢了!!!
发表于 2009-12-31 08:49:10 | 显示全部楼层
命令行脚本:

所有 Resource Hacker(TM) GUI 的功能(除了查看资源)都可以从命令行来访问,而不用打开 Resource Hacker(TM)。命令行脚本可以去掉运行 Resource Hacker(TM) 重复任务的苦差事。

命令行脚本有 2 个通用的窗体:

1. 单命令:

ResHacker.exe 命令 命令_参数

2. 多命令:

ResHacker.exe -脚本 脚本文件

单命令:

命令和命令_参数:
   -add                        ExeFile, SaveAsFile, ResourceFile, ResourceMask
   -addskip                ExeFile, SaveAsFile, ResourceFile, ResourceMask
   -addoverwrite        ExeFile, SaveAsFile, ResourceFile, ResourceMask
   -modify                ExeFile, SaveAsFile, ResourceFile, ResourceMask
   -extract                ExeFile, ResourceFile, ResourceMask
   -delete                ExeFile, SaveAsFile, ResourceMask

每个命令参数必须由逗点分隔,但第一个参数之前不要有逗点。

如果路径不包括文件名,那么操作系统的当前文件夹就假设为包括命名过的文件。通常这是良好的习惯,虽然在这里不要求,用双引号围住包含空格的文件名。

ResourceMask 允许用命令来执行单个或多个资源项并获得窗体 ResType、ResName、ResLang。如果 ResType 是一个预定义的类型,那么其编号或标识符都可以使用。如 ResourceMask dialog,128,0 与 5,128,0 是一样的。可以省略一部分或所有的 ResourceMask 项。如 dialog,, 说明一下,所有对话都将被应用到命令中,而不考虑名称或语言。并且,,,1049 表示所有含 Russian (1049) 和资源都将应用到命令中。一个空的 ResourceMask ,, 表示命令将应用到每个资源中,而不考虑类型、名称或语言。

当添加或修改项目时,ResourceFile 可以是任何项目类型的 RES 文件、BITMAP 类型的 BMP 文件、CURSORGROUP 类型的 CUR 文件、ICONGROUP 类型的 ICO 文件、以及 RCDATA 和用户定义资源类型的任何文件类型。

从文件而不是从 RES 文件中添加和修改资源时,ResType 和 ResName 必须在 ResourceMask 中指定。如果忽略了 ResLang,那么命令将以匹配的类型和名称应用到第一个语言项中。否则,如果没有匹配项存在,则假设语言为中性(0)。
在提取资源时,ResourceMask 默认超过一个项目,那么指定的 ResourceFile 必须是一个 RES 文件或  RC 文件。将二进制图像资源提取到 RC 文件中时,也会将每个图像创建为一个单独的二进制文件(ico、cur、bmp、gif、bin)。请看下面的例子。

不能直接操作 ICON 和 CURSOR 资源,除了通过使用其各自的 ICONGROUP 或 CURSORGROUP 来添加、删除、修改、以及提取。ICON 和 CURSOR 仍然可以使用,但 Resource Hacker(TM) 将假定 ICONGROUP 或 CURSORGROUP 是预期的。

也可以添加 Borland 的 DFM 文件,而不考虑文件是否是二进制或文本格式。不管用何种方法,它们将总是作为文本格式提取。(要将文本格式的 dfm 文件转换为二进制格式,请使用 Borland 的工具 Convert.exe。)

所有操作或错误都将记录到“ResHacker.log”中。


注意:如果一个脚本不产生期望的结果就检查日志!

举例:(已经忽略文件路径,有助于理解)

要从 UpdDlg.res 添加或更新 MyProg.exe 中的对话名称:maindlg lang:0
    ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, upddlg.res, dialog,maindlg,0

要从 NewImage.bmp 添加或更新 MyProg.exe 中的位图名称:128
    ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, NewImage.bmp , bitmap,128,

要从 Images.res 添加或更新 MyProg.exe 中的所有位图

    ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, Images.res, bitmap,, 

要从 ReadMe.htm l将“用户定义”的二进制资源 (README,1,0) 添加到 MyProg.exe 中
    ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, ReadMe.html, readme,1,0 

要将 Images.res 中的所有项目添加到 MyProg.exe 中(但如果有任何项目存在就会失败)
    ResHacker.exe -add MyProg.exe, MyProgNew.exe, Images.res ,,, 

要将 Images.res 中的所有项目添加到 MyProg.exe 中(跳过任何存在的项目)

    ResHacker.exe -addskip MyProg.exe, MyProgNew.exe, Images.res ,,, 

要以 Images.res 中的项目修改 MyProg.exe 中的所有项目 (忽略 Images.res 中的任何项目,其不存在于 MyProg.exe 中)
    ResHacker.exe -modify MyProg.exe, MyProgNew.exe, Images.res , , , 

要从 MyProg.exe 中将所有图标提取到 myprogicons.rc (创建 MyProgIcons.rc、Icon_1.ico、Icon_2.ico、Icon_3.ico 等等...)
    ResHacker.exe -extract MyProg.exe, myprogicons.rc,  icongroup,,

要从 MyProg.exe 中删除 GIF 名称:128

    ResHacker.exe -delete MyProg.exe, MyProgNew.exe, gif,128,


多命令:

语法:ResHacker.exe -script 脚本文件
脚本文件是一个文本文件,有下列格式:

 //注释前加上双斜杠
 [FILENAMES]
 Exe=
 SaveAs=
 Log=

 [COMMANDS]
 -add          ResourceSrc, ResourceMask
 -addskip      ResourceSrc, ResourceMask
 -addoverwrite ResourceSrc, ResourceMask
 -addoverwrite ResourceSrc, ResourceMask

 -modify       ResourceSrc, ResourceMask
 -extract      ResourceTgt, ResourceMask
 -delete       ResourceMask

如果忽略日志,那么将使用默认日志 - ResHacker.log。
注意:如果一个脚本不产生期望的结果就检查日志!

举例:

rh_script_myprog_rus.txt -

  //在以 Russian(1049) 项目替换它们之前,
  //该脚本将删除 MyProg.exe 中的所有语言中性(0)
  //的字串表、菜单和对话资源项...

 [FILENAMES]
 Exe=    MyProg.exe

 SaveAs= MyProg_Rus.exe
 Log=    MyProg_Rus.log

 [COMMANDS]
 -delete  MENU,,0
 -delete  DIALOG,,0
 -delete  STRINGTABLE,,0
 -add     MyProg_Rus.res, MENU,,1049
 -add     MyProg_Rus.res, DIALOG,,1049
 -add     MyProg_Rus.res, STRINGTABLE,,1049


rh_script_myprog_upd_images.txt -

//该脚本在 MyProg.exe 中更新 2 个位图和一个图标...

 [FILENAMES]
 Exe=    MyProg.exe
 SaveAs= MyProg_Updated.exe

 [COMMANDS]
 -addoverwrite Bitmap128.bmp, BITMAP,128,

 -addoverwrite Bitmap129.bmp, BITMAP,129,0
 -addoverwrite MainIcon.ico, ICONGROUP,MAINICON,0


rh_script_myprog_upd_all.txt -

  //该脚本以 MyProgNew.res 中的所有资源
  //替换 MyProg.exe 中的所有资源

 [FILENAMES]
 Exe=    MyProg.exe
 SaveAs= MyProg_Updated.exe

 [COMMANDS]
 -delete  ,,,            //在...之前删除所有资源
 -add MyProgNew.res ,,,  //添加所有新的资源

评分

参与人数 2金钱 +40 贡献 +2 收起 理由
autoit3CN + 20
afan + 20 + 2

查看全部评分

发表于 2009-12-31 09:52:22 | 显示全部楼层
高手 学习,强
 楼主| 发表于 2010-1-1 01:30:06 | 显示全部楼层
十分感谢!!!!
发表于 2010-6-14 22:54:25 | 显示全部楼层
不是我不认真对待标题,而我根本不知道有错别字.
我是一个盲人,平时只是借助于屏幕朗读器浏览网叶.
麻烦楼 ...
sky808 发表于 2009-12-31 03:45


突然看到个帖子,心中一片感动...
这种求学精神真是值得敬佩!
发表于 2010-6-19 09:59:57 | 显示全部楼层
不是我不认真对待标题,而我根本不知道有错别字.
我是一个盲人,平时只是借助于屏幕朗读器浏览网叶.
麻烦楼 ...
sky808 发表于 2009-12-31 03:45



    我没有别的意思,只是好奇,如果LZ是盲人,即使知道了答案如何编写程序?代码是可以敲打,可是如果无法看到,怎能确定执行结果?何况是修改位图资源,更是需要查看
发表于 2010-11-15 00:57:42 | 显示全部楼层
Resource Hacker原来可以这样用
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 00:28 , Processed in 0.096746 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表