·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 工具使用 >> Resource Hacker 帮助    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

Resource Hacker 帮助

作者: 吕达嵘 来源:汉化教学 时间:2003-07-19 点击:15353

 

Resource Hacker 帮助

汉化:吕达嵘

Resource Hacker
版本 2.5

(c) 1999 Angus Johnson
ajohnson@rpi.net.au
http://rpi.net.au/~ajohnson/resourcehacker

授权汉化:吕达嵘 (ldr@bentium.net)
网址:http://unreally.yeah.net




简介:

Resource Hacker 可以被用来:

1. 查看 Win32 可执行和相关文件的资源 (*.exe, *.dll, *.cpl, *.ocx),在已编译和反编译的格式下都可以。

2. 提取 (保存) 资源到文件 (*.res) 格式,作为二进制,或作为反编过的译资源脚本或图像。
图标,位图,指针,菜单,对话,字符串表,消息表,加速器,Borland 窗体和版本信息资源都可以被完整地反编译为他们各自的格式,不论是作为图像或 *.rc 文本文件。

3. 修改 (替换) 可执行文件的资源。
图像资源 (图标,指针和位图) 可以被相应的图像文件 (*.ico, *.cur, *.bmp),*.res 文件,甚至另一个 *.exe 文件所替换。
对话,菜单,字符串表,加速器和消息表资源脚本 (以及 Borland 窗体) 可以通过使用内部资源脚本编辑器被编辑和重新编译。
资源也可以被一个 *.res 文件所替换,只要替换的资源与它是同一类型并且有相同的名称。

4. 添加 新的资源到可执行文件。
允许一个程序支持多种语言,或者添加一个自定义图标或位图 (公司的标识等) 到程序的对话中。

5. 删除 资源。大多数编译器添加了应用程序永远不会用到的资源到应用程序中。删除这些不使用的资源可以减小一个应用程序的大小。



安装:

“Resource Hacker”不要求安装,只要从下载的压缩文件中解压缩可执行文件,附带的帮助文件,“readme”文件和 sample.dll 到您想要的文件夹中。并且没有项目被写入 Windows 注册表。为了存储对话时的信息,在应用程序文件夹中将创建一个 ini 文件。

卸载:

要删除程序,只要使用 Windows 资源管理器删除这些文件即可。



概述:

通过从 Resource Hacker 的菜单中选择“文件|打开”,可以打开一些 Windows 95/98/NT 可执行文件 (包括 32位 exe, dll, ocx 和 cpl)。一个完整的文件资源列表将被显示为一个树状结构。通过从菜单中分别选择“查看|展开树状目录”或“查看|折叠树状目录”,资源树可以被完展开或折叠。



一个特殊的资源项目被它的资源类型,名称和语言ID 所定义。

资源组合为“资源类型”。有许多的预定义资源类型 (图标,指针,位图,对话,菜单,rc 数据等) ,除了程序员可能自定义的其他资源类型。

资源项目被存储于他们各自的资源类型中,并且拥有一个“资源名称”,它是那种类型中唯一的。这个“名称”通常可以是一个整数值或一个字母数字串,然而,一些资源类型 (如字符串表) 仅仅允许整数值的名称。

每个已命名的资源可以拥有超过一种语言特殊项目来使程序可以处理多语言。资源树中每一个资源名称下面将显示至少一个“资源语言”项目。语言ID 是一个字整数值构成的一个主要语言字节以及由 Windows 定义的子语言字节。(如果资源项目是“中性语言”那么该值将为零。)

指针和图标:

在这里指针和图标需要特别提出,因为他们的资源信息被分割超过两种资源类型:分别为“指针”和“指针组”;以及“图标”和“图标组”。

每个图标 (或指针) 可以拥有几种图像 - 如 16x16 (16 色),32x32 (16 色),16x16 (256 色)。窗口中实际着色的图像依赖于变量,如 - 小图标,大图标,显示颜色分辩率等等。

举例:窗口命令 LOADICON() 将首先查找图标信息以指定“图标组”中的IconName。这个图标信息包含图像的数量和所有适合于指定图标的图像的“图标”类型 NameOrdinals (字整数“名称”)。Windows 然后着色“最佳”图像 (如果存在超过一个的话) 用于当前窗口配置。



当在一个文件中替换图标 (或指针) 时,“整个”图标;图标信息 (在“图标组”中) 和各自的图像 (在“图标”中)都将被替换。

当从一个资源中提取 (保存) 图标 (或指针) 时:如果资源树中一个“图标”类型项目是被突显的,那么图像将被保存为单个的图像图标。然而,如果“图标组”项目被突显,那么适合于选定的图标组的所有图像都将被保存到指定的图标文件夹中。

查看资源:

简单地从资源树中选择资源 (一旦打开了一个文件)。资源将显示下列各项:

一个图片图像 -


反编译后的文本 -


编译图像和反编译文本的组合 -


原始数据 (十六进制在左边,ASCII 文本在右边) -


注意:使用 Borland VCL (如大多数 Delphi 程序) 编译的程序不存在通常的对话,菜单或加速器资源,而是存储该信息在“RC 数据”中。


提取 (保存) 资源:

图标,位图,指针,菜单,对话,字符串表,消息表,加速器,Borland 窗体和版本信息资源都可以以他们未编译过的格式被保存到文件中,否认是作为图像文件或作为资源文本文件 (*.rc)。首先使用树状查看控件选定特殊资源,从菜单中选择“特殊|保存 [资源名称] ...”。要保存一个资源到编译过的资源文件 (*.res):从菜单中选择“特殊|保存资源为 *.res 文件 ...”。要保存一个单个资源为原始的二进制文件:从菜单元中选择“特殊| 保存资源为二进制文件 ...”。

要保存一个特殊资源类型的所有资源到文件,首先使用树状查看控件选择特殊资源类型。然后从菜单中选择“特殊|保存 [资源类型] 资源 ...”。

要保存所有资源到文件,从菜单中选择“特殊|保存所有资源...”。无法被反编译为资源脚本的资源 (如:图像) 被转换回他们的原始文件格式,并且被作为资源脚本存储到同一个文件夹中。(如:Cursor.cur,Cursor_2.cur,Bitmap.gif, Icon.ico)。无法识别数据格式的资源被存储为 *.bin 文件。

修改 (替换) 资源:

警告:

如果用户打算修改资源,请首先确认原始文件已经备份。 然后,放弃备份之前请彻底地测试“新”文件。

对于对话和菜单资源,删除控件或更改控件 ID 号很可能导致被修改的程序当掉。然而,更改一个控件的标题通常是安全的,因为正在修改他们的位置,大小和可视性。添加一个新的控件是不会出问题的。

替换图像:

如果要被替换的资源项目是一个图标,指针,或位图,来源可以分别是一个 *.ico,*.cur 或 *.bmp 文件,或者从一个 *.res 或另一个 *.exe 文件中选择。从菜单中选择“特殊|替换图标”(指针或位图)。





使用内部编辑器来修改基于资源的文本:

使用内部资源编辑器,对话,菜单,字符串表,消息表,加速器和 Borland 窗体资源都可以被很容易地编辑和重新编译。内部编译器支持 - \t , \n , \\ , \", 和 \000 .. \377 - 在资源字串中表现为各自的制表符,换行,反斜杠,双引号和八进制字节。#define - 声明也支持。简单地编辑被显示的资源脚本,并点击 [编译] 按钮。被修改编译的资源将立即被显示出来。编译时若遇到任何错误都将被报告错误消息。



对话控件也可以被可视化改变大小和/或移动,您所作的更改将自动被反映在资源脚本中。它可以自动完成屏幕像素的对话单位之间的转换。

首先通过在显示的对话中点击一个控件来选定它。控件的边框就可以被拖动从而改变控件的大小。



要想移动控件而不改变大小,请选定控件之后点击它,并把它拖动到新的位置。



一旦改过,保存之前脚本需要被重新编译。要想选择一个新的控件,请用鼠标点击它,或者使用 tab 键来选定。如果您无法点击控件,那么它有可能被另一个控件“覆盖”了。如果他们的位置重叠,在资源脚本中声明的被覆盖的控件可以被“拖动”到上述控件的顶端。要想移动或改变一个“隐藏”控件的大小,要么移动或缩短重叠控件,要么更改已经在资源脚本中声明的控件的次序。

替换除了图像之外的资源:

资源也可以被定位于外部 *.res 文件中的资源所替换。替换资源最好是同一类型的资源,而且最好有相同的资源名称。从菜单中选择“特殊|替换其他资源 ...”。



用 *.res 文件中的资源更新所有资源:

资源也可以被定位于外部 *.res 文件中所有匹配的资源所替换。如果他们有相同的资源类型,名称和语言ID 号的话,*res 文件中的一个资源将仅仅替换目标 (exe,dll) 文件中的一个资源。从菜单中选择“特殊|更新所有资源 ...”。

一旦所有修改被作出,已修改的文件图像可以被保存到文件,从菜单中选择“文件|保存为”。

添加资源:

资源可以被添加到一个可执行文件中,只要没有相同类型,名称和语言 ID 号的资源存在。从菜单中选择“特殊|添加一个新资源 ...”新资源只能从一个 *.res 文件中添加。

添加资源可以让程序支持多语言。
(注意:Windows95 和 Windows98 不使用多语言资源,这是 WindowsNT 的特性。我假定,如果有多个语言资源可用的话,Windows98 仅仅是挑选第一种资源。)

举例说明:
* 任务:添加一个对话 30757 的“法语(FRENCH)”翻译到 Samples.dll 中。
* 解决方法:
1. 打开 Samples.dll 并选择对话 30757。
注意在脚本中当前语言为 LANG_NEUTRAL,SUBLANG_NEUTRAL。
2. 更改它为 LANG_FRENCH,SUBLANG_FRENCH,并且翻译对话标题和每一个控件标题为法语。 点击 [编译]。
3. 保存资源到一个 *.res 文件 (如:FrenchDlg30757.res)。
4. 关闭 Samples.dll 而不保存,然后重新打开它。
对话 30757 应该仍然是 LANG_NEUTRAL,SUBLANG_NEUTRAL。
5. 从菜单中选择“特殊|添加新资源”,并且打开刚才被创建的文件 FrenchDlg30757.res。
6. 选择对话 30757,它现在已经有 languageId 1036 (French),点击 [添加资源]。
7. 最后,保存 Samples.dll。瞧!

技巧:更改 Resource Hacker 的编辑器字体可以在查看不同语言的脚本时帮助您。(从菜单中选择“查看|编辑器字体 ...”。)

添加图标或位图 (公司标识等) 可以使它们显示于程序的对话中。

举例说明:
* 任务:添加一个图标到 Windows 的“文件打开”对话。
* 解决方法:
1. 打开 "c:\windows\system\comdlg32.dll"。
(“文件打开”对话定位于该 dll 中并“命名”为 1547。)
2. 在这里“图标组”类型是我们感兴趣的。因此请确认要被添加的图标 (来源于一个 *.res 文件)的“图标组”名称没有被使用。在 ComDlg32.dll 中,“命名”图标组范围为从 528 到 539,因此任何其他的整数值或字母数字串都可以被使用。(不用担心资源名称会被“图标”类型所使用,因为 Resource Hacker 将确认与新图标关联的图标图像,也将给予唯一的名称。)
(技巧:如果您没有资源编译器来创建包含新图标的 *.res 文件,请从一个 *.ico 文件中以您想要的图标替换 Resource Hacker 的 MAINICON,然后保存它为一个 *.res 文件。)
3. 添加图标到 dll 文件,从菜单中选择“特殊|添加新资源”。
4. 假定新图标命名为“MAINICON”,在对话 1547 中添加下列控件于控件列表的未尾:
CONTROL "MAINICON",-1,STATIC, SS_ICON|WS_CHILD|WS_VISIBLE,13,142,21,20 
5. 编译对话脚并保存文件为 comdlgXX.dll。
6. Windows 运行时 comdlg32.dll 无法被替换,它只能于 DOS 模式下才能被替换。关闭 Windows 并且从 DOS 模式重新启动。
7. 使用 DOS 命令重命名旧的 comdlg32.dll 为其他名称,如 comdlg98.dll,然后重命名新创建的文件为 comdlg32.dll。
8. 重新启动 windows。一切搞定!(当然,要想添加一个位图而不是图标,不用这混乱,因为对位图来说,并没有“位图组”。)





历史:

2000年9月10日 (版本 2.5):

* 现在资源也可以被删除了 (除了版本信息资源)。
* 修正错误:修改过的应用程序偶尔会显示一般的可执行图标,而不是应用程序的图标。
* 修正了一些其他小错误。

2000年8月18日 (版本 2.4.0.4):

* 修正错误:内部编译器不会编译一些中文文本。
* 改进的翻译支持。脚本现在使用代码页适合于内部编辑器的选定字体,而胜于操作系统的默认代码页。
(感谢 Frank Cheng 的反馈,修复这些 DBCS 发布。)
* 修正错误:有时候字符串表无法被反编译。
* 修正错误:如果加速器包括 ASCII 关键词,它将无法编译。
* 命令行现在将接受文件名称作为一个参数。
* Samples.dll 文件不再包括于下载文件中。
* 新主页: http://rpi.net.au/~ajohnson/resourcehacker!EF(`http://rpi.net.au/~ajohnson/resourcehacker',`',0,)。

2000年7月3日 (版本 2.4.0.3):

* 修正错误:引入以前更新中的更改错误,它在“更新所有资源”中导致一个错误使您无法更新。
* 修正错误:当提取资源到一个 RES 文件中时,偶尔有错误。
* 改进了编译器的几个很小的功能。

2000年5月26日 (版本 2.4.0.2):

* 内部编辑器已经被加入多字节字符集支持 (中文,日语,韩国语) (感谢 Bob Ishida 在调试中的反馈)。
* 修正错误:在替换指针时,多图像指针没有被正确导入。
* 大量改进以及装饰性的更改。
* 这个帮助文件中大量的文档错误已经被修复。

2000年4月20日 (版本 2.3.0.6):

* JPG 和 MIDI 数据格式现在可以被检测,显示或播放。
* 修正错误:在 RC 数据部分中,WAVE, AVI 和 GIF 格式无法被检测。
* 修正错误:被最后保存的资源数据文件夹无法在会话中被存储。

2000年4月16日 (版本 2.3.0.5):

* AVI 和 WAVE 数据格式现在可以被检测,显示或播放。
* GIF 数据格式现在可以被检测和显示 (感谢 Anders Melander 的 TGifImage)。
* 大量的样本资源已经被从 Resource Hacker 可执行文件中移去,并把它放入“Samples.dll”(注意:"Samples.dll" 不包括于下载文件中。)

2000年2月13日 (版本 2.3.0.3):

* 编辑器的字体可以被更改了。这也可以允许更改编辑器的字体脚本 (字符代码),这在翻译资源时是很有用的。
* 加入菜单编辑器 [显示/隐藏] 按钮。
* 彩色的树状查看指针被移去。
* 对话控件现在已经被协调显示 (查阅版本 2.3.0.2)。

2000年2月11日 (版本 2.3.0.2):

* 修正错误:主要修正 dll 文件的偶尔的失败。现在已最终修复。
* 树状查看窗口现在可以被调整了。
* Resource Hacker 的窗口大小和位置现在被存储于会话间 (在一个 *ini 文件中) 它可以保存上次打开的文件夹以及保存的文件。
* 当移动或者重新改变对话控件的大小时 - 控件调整 (在对话单元中) 现在被显示于定位于对话脚本上方的面版中。

2000年2月9日 (版本 2.3.0.1):

* 资源脚本中的语言声明不再是“只读”。
* 现在只要一个操作,资源可以就被所有匹配的外部资源文件 (*.res) 所更新。
* 现在可以添加资源。
* 修正错误:从 *.res 文件中替换指针和图标会中断。

2000年2月1日 (版本 2.2.0.1):

* 修正错误:修正了 dll 偶尔会停止它们的工作 (跟随资源部分的相关的虚拟地址部分无法被被调整)。
* 现在消息表和加速器资源也可以使用内部编辑器编辑和重新编译。
* 即使当对话包括未注册的控件,它也可以被显示 (一个灰色的矩形将被显示于每个未注册控件的位置上)。
* 现在通过使用下列风格中的任一种,对话编辑器可以编译定义的控件:
CONTROL text, control-ID, control-class, control-style, x, y, width, height
CLASS_MAIN_STYLE text, control-ID, x, y, width, height, control-style
* 现在只要一个操作,资源 (菜单,对话,字符串表,加速器和消息表) 就可以被保存到一个单一的 *.rc 文件中。
* 现在已更改的文件保留了原始文件的日期和时间。
* 许多其他的小改进。

2000年1月17日 (版本 2.1.1.4):

* 修正错误:修复了内存溢出。
* 修正错误:对话资源中的数字标题不被正确编译。
* 现在资源可以被保存为二进制文件。
* 改进了资源脚本中的特殊字符的处理 (制表符,换行,反斜杠和双引号)。
* 对话资源窗体和控件现在可以被可视化移动和改变大小。

2000年1月2日 (版本 2.0.1.2):

* 对话,DIALOGEX,菜单,MENUEX,字符串表和 BORLAND 窗体资源现在可以使用内部编辑器编辑和重新编译。
* 修正错误:被显示为十六进制的大资源始终载入。这些资源的显示算法现非常快了。
* 修正错误:对话脚本控件标题中的制表符和换行字符现在分别被改为 \t 和 \n。
* 加入了位图交换对话 - 当选择时允许位图的查看。
* 个别图标不再被缩放而是显示它们实际的大小。
* 现在可以拖文件到 Resource Hacker 中而打开文件。

1999年12月12日 (版本 1.0.0.5):

* 修正错误:从 *.cur 文件中交换指针会中断。
* 修正错误:菜单资源脚本总是不能被正确反编译。
* 图标和指针交换对话现在显示选定的图像。
* 图标和指针资源现在被隐藏于“交换其他资源”对话中。
* MENUEX 和 DIALOGEX 资源脚本现在已完全支持。
* 资源脚本现在也反编译控件风格属性。
* Borland Delphi 窗体文件现在可以反编译了。
* 加速器现在可以反编译了。
* 加入了帮助文件。

1999年12月3日 (版本 0.5.0.1):

* 最初版本。



已知局限性:

问题 1:
Resource Hacker 是使用 Delphi(tm) ver 3.02 编译的。
当反编译和重新编译 Delphi ver 5.0 编译的应用程序的 Borland Delphi 窗体时,如果帧被用来创建窗体,重新编译的应用程序将有错误。这个错误是由于内联 DFM 关键词未被识别。在编译时,内联关键词将被对象替换,并且如果在重新编译之前手工纠正,内联将被内部编译器所拒绝。

要解决这个限制,需要大量的工作来使用 Delphi ver 5.0 编译 Resource Hacker。

问题 2:
一些应用程序被 EXE 加壳软件所“加壳”,从而减少程序的体积。这种情况下,要查看和修改资源是非常困难的。当用 Resource Hacker 查看一个“加壳” 的可执行程序时,只有资源类型和名称可以看到,而不是实际的资源。

这不是查看中的错误。应用程序开发者可能是作为有益的特性来看待它的,因此没有计划“修复”。




许可协议:

该程序是作为免费软件发布的,但有下列条件:

1. 没有预先作者的同意,它不能被通过 Internet 或通过其他媒体发布。特别是,它不能被非法修改后放入 Internet 站点。

2. 它不能被用于修改这个或其他软件的版权通告,不能以任何方式假装成注册用户或任何软件的所有权,也不能以任何方式非法修改或破坏任何软件的版权。

3. 不给予性能上的保证。任何由于使用“Resource Hacker”而导致软件的损坏将由用户自己承担。

请使用上方的电子邮件地址发送任何错误报告给作者。欢迎所有反馈。

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): Resource Hacker

·上一篇: RVA字串乾坤大挪移--偏移量转换器的简单用法 ·下一篇: 浅谈软件的脱壳

· 版权申明: 本文引自《汉化教学》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化教学》[ 作者: 吕达嵘],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号