·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> VB汉化 >> 突出重围-VB 程序字体字号修改之四    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

突出重围-VB 程序字体字号修改之四

作者: 梁利峰 来源:点睛工作室 时间:2003-08-02 点击:10249


突出重围
        —— VB 程序字体字号修改之四


声明

个人可以自由转载本文,不过应保持原文的完整性,并通知我;商业转载先请和我联系。

本文没有任何明确或不明确地提示说本文完全正确,阅读和使用本文的内容是您自己的选择,本人不负任何责任。

如果您发现本文有错漏的地方,请您给我指出;如果有什么不理解的,请您给我提出。

意见、建议和提出的问题最好写在我的主页 http://llf.126.com 的留言版上。

无中生有

上次说过,关于“Settings”窗体,可以使用增加字体块的方法更改字体,“Weiping”也来问:“究竟加在哪里呢?”。我想先澄清一下,关键不是字体块“加在哪里”,而是从其它地方删除字节之后,应该修改的字符串计数器控件块计数器都有哪些?都在哪里?

好的,就以“Settings”窗体为例。这一次使用上一次修改后的文件,所以所说的偏移量也以此为准。

用 UEdit 打开 Vopt99.exe 。跳到偏移量“12480h”处(为简单起见,查找过程略),我们见到,这里就是“Settings”窗体名所在的地方了,不过这个窗体没有图标,也没有“Caption”(VB 中所有希望没有标题栏的窗体必须没有“Caption”),所以下一行可辨认的就是“LinkTopic”,也就是“Form1”。不过我们先把这些放下,因为我们还没有空间加入字体块呢。

再下去两行,可以见到“Frame1”,然后下一行是这个帧的“Caption”,在这里是“显示参数设置”,共 12 个字节,但是“显示参数设置”之前的两个字节是“13 00”,也就是十进制的 19 ,所以这里可以给我们提供 19 - 12 = 7 个字节。选中“显示参数设置”之后的 7 个字节的“00”,按“Ctrl+X”剪切(UEdit 在这种情况下的删除是没有作用的),然后把“13 00”改成“0C 00”,向上一行,可以见到“FF”之后的“01 3F 00 00”,在这里,“FF”是上一个“块”的结尾标志,从“01”开始就是这个控件的地盘了,而“3F 00”是这个控件从“3F”开始的大小,所以减少 7 ,改成“38 00”。现在我们已经得到 7 个字节了。

再往下走,在“12589h”处,可以见到“DisplayCheck”,然后是它的标题(Caption)“隐藏大文件名单”,共 14 个字节,之前的“字符串计数器”是“14 00”,就是 20 ,所以在这里我们又可以得到 20 - 14 = 6 个字节。类似上例,剪切后面的 6 个“00”,修改“14 00”为“0E 00”,找到此“块”的开头“1257fh”处,把下两个字节“3F 00”减少 6 ,改成“39 00”。现在,我们又有了 6 个字节,一共得到了 13 个字节,已经可以开始插入字体块了。

现在就要考虑字体块插在哪里的问题了。还是像上一次那样加在“46”之前试一下吧。

到“12479h”处,上一次说过,这里的数值是窗体本身的大小,现在是“43 00 00 00”,增加 13 个字节,就是“50 00 00 00”,修改它。现在先找到窗体的结尾,计算 12479h + 43h = 124bch ,跳到“124bch”处,向前的三个字节是“46 03 FF”,就插在“46”前面好了。随便复制 13 个字节,并以“插入”模式加入“46”之前,然后把它们改成“40 01 86 00 00 90 01 90 5F 01 00 01 20”,存盘。

好的,现在运行,选菜单的“关于”,出现了什么呢?“无效文件格式”错!

没有关系,我们把字体块前移一个字节,再存盘,再运行,再次“无效文件格式”错。That's all right ,again ,再前移一个字节,再存盘,再运行,如何? :) —— Enjoy it !

变本加厉

是否从刚才偷取字体块所需的空间的时候,就开始想要为一些因空间问题而未能汉化的标题之类的做打算了?很好,我们开始。

还是 Vopt99 。在“显示参数设置”后面,有三个按钮,“帮助”、“取消”和 …… “OK”,就是“OK”,让我们继续。

“取消”的英文是“Cancel”,共 6 个字节,而“取消”只需 4 个字节,可以省出 2 个字节,正好能送给“OK”。

跳到“12547h”,这里是“取消”的字符串计数器,把它从“06 00”改成“04 00”,并且把原来翻译时加在两边的空格剪切掉,把“12531h”处的“块计数器”减 2 ,改成“2D 00”。

跳到“12577h”,在“OK”前插入 2 个字节,并把这四个字节改成“确定”,把它前面的计数器改成“04 00”,并把“1255fh”处的“块计数器”改成“2D 00”,存盘。

好的,运行,进入“显示参数设置”方式,看到了吗?原来的“OK”已经被改成了“确定”。

(有时候,某些计数器不修改也能运行,但是一定要保持修改计数器的习惯,这是保证程序正常运行的首要条件,并且,这种累积的错误很有可能造成无法挽回的后果,一定要注意!)

成长的烦恼

刚才,进入“显示参数设置”方式时,除了看到“OK”已经被改成了“确定”,还看到了什么呢?对了,那个“CheckBox”的标题“隐藏文件分布情况图”因为字体的加大,由一行变成了两行,并且这两行都没有完全显示出来,这样的结果可是不行,可说是过犹不及了。

怎么办呢?当然是修改控件的宽度了。

跳到“125c7h”处,这里是“隐藏文件分布情况图”所在的控件的“块计数器”的位置,它的值是“3F 00”,所以 125c7h + 3fh = 12606h ,跳到“12606h”处,“FF”就是它的结尾标记,再向前 12 个字节,从此开始的 8 个字节是这个“CheckBox”的位置信息,目前是“F0 00 D0 02 08 07 C3 00”,每 2 个字节组成的数依次是它的“Left”、“Top”、“Width”和“Height”,我们需要修改的是“Width”,就是“08 07”,十进制是“1800”,把它改成“2000”,就是“D0 07”,现在,修改,存盘。

现在,再次运行,进入“显示参数设置”方式,不错吧?继续把其它的也修改了就可以了。

(注意,这里我没有列出所有控件的位置信息的位置,因为查找起来比较费事,但是如果使用 WinHEX 的话,因为它能显示当前光标所在的 1 字节、2 字节和 4 字节的十进制整数的大小,会很有帮助。)

异域采风

昨天,见到一个所谓的 VB5 在线反编译的站点,URL 是 http://www.support.ems.ru/%7Egold/vb5/index.html ,试了一下,并不能真的反编译,为了看别人的源代码的人就不必去了,但是它能把窗体的信息“反编译”出来,对于汉化人来说,夫复何求呢?!

这个站点在格林威治时间 18 点到凌晨 3 点或星期天全天可以提供 1M 以下的反编译,其它时间只能有 50K 而已,所以北京时间凌晨 2 点到中午 11 点之间再去吧。(可以先用 Zip 打包)

看来,在我之前已经有人在研究这个问题了,只不过他把这种工作定位在“反编译”上,最终却只能“反编译”一些窗体出来,可能是很失望了,所以从 98 年到现在都没有更新过。(而且不支持中文,不过做汉化,要反编译的自然是英文软件了)

虽然不能真的把它反编译出来的程序再编译成正常的可执行文件,但是却可以提供我们很多的信息,比如哪些字符串是需要翻译的,哪些不能翻译,哪一个控件的位置信息是多少等等。(真想得到它的源代码,那样我就不需要再研究窗体块的结构了。:)

(今天[5.29]得知经常说的 VB5 的反编译程序 vb4tools 确实可以反编译出窗体信息和汇编语言的函数,不过只对于极其简单的程序有效,稍微复杂的程序,在反编译的过程中会出错退出,以至于无功而返,希望上面的在线反编译不要出现这种问题)

最终幻想

刚才说不能重新编译,其实也不是完全不可以重新编译,虽然没有代码,我们一样可以使用 VB 的可视化环境编辑这些窗体(真的很棒!),修改字体,修改标题,修改位置,然后重新编译,虽然所得的这个程序并不是我们想要的,但是我们可以把其中的窗体块复制出来,替换原程序的窗体块。不过有一点需要注意,这样得到的窗体块一般总是和原窗体块不一样大的。如果大于原来,需要修改源代码,使之减小,再重新编译;如果小于原来,需要在窗体块的某些地方增加一些字节,使之和原窗体块一样大,然后再进行替换。所幸增加字节还是很容易做到的。 :)

而且既然窗体可以被反编译出来,那么制作 VB 的“终极汉化工具”也不是很困难的事情,所有的问题都只是工作量而已。

好的,现在我来总结一下。

VB 中有两种资源形式。一种就是我们在这里所说的“窗体块”,因为所有的的 ASCII 字符串都是存在于“窗体块”之中的,所以不存在“ASCII 字符串”资源;另外一种就是 UniCode 字串,使用我编的“字串替换器”可以找到所有的这种 UniCode 字串(指的是 VB 格式的 UniCode 字串,VB 的可执行文件中也有一些不是 VB 格式的 UniCode 字串,但是这些字串并不显示,不需要翻译,所以我的“字串替换器”并不提取这种 UniCode 字串,即使“无限制查找”的时候也不提取。)。都可以进行翻译,窗体块里的字符串可以改变长度,但是 UniCode 字串的修改不能长于原字串。

(VB 程序也可以使用标准的 Windows 格式的资源 —— 也就是通常所说的 VC 格式的资源 —— 不过因为 VB 使用 Dialog 之类的资源得不偿失,所以即使使用,也不会有 Dialog、Menu、Accelerator 之类的资源,而只会有 String 或 BitMap 之类的资源,可以使用标准的资源编辑器进行汉化,但是因为 VB 本身并不能编辑这种资源,所以一般是使用 VC 编辑并编译再链接到 VB 程序中的。我不认为这种资源属于 VB 资源)

至此,我想关于字体块的问题已经完全结束;另外,也可以说我已经解决了所有 VB 基础汉化(使用这些技巧已经可以完美汉化 95% 以上的 VB 程序,如果想要完美汉化另外的 5% ,我想可能是需要有一定的编程经验了)中的疑难问题,所以如果不出意外的话,这一篇文章不只是我字体研究的结束,也同样是我关于 VB 汉化的终结篇。

(另外,今天[5.29]得知,新起点汉化工作室的阿涛也研究了 VB 字体的修改,并且有一种我没有发现的修改字体的方法,建议作 VB 汉化的同志们也看一看。)

点睛工作室·梁利锋 结稿于 2000.5.26(5.29 修正)

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): 字体 VB

·上一篇: 还是字体块--VB 程序字体字号修改之三 ·下一篇: WinAMP 字号的修改-C 程序字号修改一例

· 版权申明: 本文引自《点睛工作室》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《点睛工作室》[ 作者: 梁利峰],如需转载请直接联系原始作者,并请注明原始出处。

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

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