| 第四篇:突出重圍 (2000.05.29) 無中生有 上次說過,關於 “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 點或星期天全天可以提供 1MB 以下的反編譯,其它時間只能有 50KB 而已,所以北京時間淩晨 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 漢化的同志們也看一看。) |