二、Super WinPE系統(tǒng)漢化
由于PE Builder是英文軟件,使用英語或相近語言操作系統(tǒng)安裝光盤制作的Super WinPE一般不會有什么問題。但如果是使用漢語等雙字節(jié)語言的操作系統(tǒng)安裝光盤制作Super WinPE,則Nu2menu菜單和中文語言的程序界面會充斥著亂碼(圖1),更別說中文輸入法了,根本無法正常使用。亂碼是由于PE Builder默認拷貝到Super WinPE的字庫以及在系統(tǒng)中的設置均是針對于英文,所以我們需要在制作時將中文字庫拷貝到Super WinPE中,并且修改系統(tǒng)為正確的語言設置。這個工作可在制作完ISO鏡像后,通過手工修改鏡像文件完成。但這樣做不僅麻煩,而且每制作一個ISO文件都要修改,如果經(jīng)常制作的話,工作量不免太大。所以一勞永逸的方法是制作一個簡體中文語言的插件,這樣當Super WinPE的ISO制作完畢后就是正確的語言顯示了。下面我們就來編寫一個簡體中文語言插件,同時用來詳細演示插件如何開發(fā)。 (一)中文插件的開發(fā) 一個典型的插件一般至少包含有*.html、*.xml、*.inf這3個文件(圖2)。*.html文件一般是插件的說明或幫助文檔,*.xml則是插件在系統(tǒng)啟動后的菜單項。但有些插件的使用并不需要幫助和菜單項,例如我們下面將編寫的中文語言插件,那么*.html和*.xml文件就可省略。*.inf文件是插件的靈魂,它告訴PE Builder建立插件需拷貝的文件、拷貝文件的位置、插件在Super WinPE中的正確設置等關鍵信息。所以插件的開發(fā)基本上就是inf文件的編寫。 我們使用記事本來編寫inf文件即可,需要注意的是文件最后的存盤格式必須是標準的ASCII文件,不能是unicode文件。腳本中的語句前以分號“;”開始,則會被認為是注釋而不會被最終處理,另外注意代碼中的所有標點符號都應為半角,否則無法被正確識別。此外需要說明的一點是,在改寫中會經(jīng)常測試改寫是否正確有效,如果每完成一步都要刻盤再重啟機器,未免太過麻煩,因此推薦使用虛擬機軟件Virtual PC或VMWare,用ISO鏡像文件直接啟動虛擬系統(tǒng)進行測試(注:關于虛擬機軟件的使用可參考本刊2003年第7期和第9期的相關文章)。 1.創(chuàng)建插件inf文件 打開記事本,新建文件。通常任何一個PE Builder的插件都能在開頭找到以下兩句(圖3)。 [Version] Signature= "$Windows NT$" 這兩行信息必須添加到新建文件中,否則inf文件就不可用,[Version]之上可按照自己的需要添加注釋(行前加分號),添加內容完畢后將其存為chinese.inf文件,這個插件顯然還不能做任何事情,下面我們還要添加其他部分。 2.[PEBuilder]部分 每個插件的inf文件都必須包含這一部分,此部分有3個參數(shù)。參數(shù)“Name”是插件名稱,即在PE Builder中顯示的名稱。參數(shù)“Enable”是插件的默認初始狀態(tài),0表示插件在PE Builder中非激活,1則表示插件在PE Builder中默認激活(圖4)。這個部分的中文插件如下編寫: [PEBuilder] Name="chinese Language Ver 1.0" Enable=1 3.[WinntDirectories]部分 此部分使用固定語句格式:directoryID=dirname[,attribute],其主要作用是在Super WinPE中創(chuàng)建目錄?!癲irectoryID”是建立目錄的ID,在插件的inf文件中你可隨意使用字母a~z分配ID;“dirname”即建立目錄的名稱,必須使用半角的雙引號包括(圖5);“attribute”的數(shù)值表示一些選項開關,默認值為0。我們的插件如下編寫: [WinntDirectories] a="documents and settings\default user\my documents",3 4.[SourceDisksFiles]部分 這個部分是插件的關鍵部分,它告訴PE Builder插件需要將哪些文件拷貝到Super WinPE中的哪個目錄里。此部分使用如后基本語句格式:filename=directoryID。其中“filename”即需要復制的文件,“directoryID”是目標文件夾的系統(tǒng)目錄名稱,它使用不同數(shù)字來代表不同的系統(tǒng)目錄。由于我們需要編寫的是簡體中文語言插件,所以要將正確的中文字庫拷貝到Super WinPE的Font目錄中,順便也可將輸入法文件和字庫拷貝到Super WinPE的system32目錄中。system32系統(tǒng)目錄ID為2,F(xiàn)ont系統(tǒng)目錄為22,故此部分我們如下編寫: [SourceDisksFiles] WINPY.IME=2 WINPY.MB=2 app936.fon=22 ;…… 以上省略號處省略了10行,每行格式都類似于“app936.fon=22”,只是將“app936.fon”分別改為vga936.fon、svgasys.fon、svgafix.fon、s8514fix.fon、s8514oem.fon、s8514sys.fon、simsun.ttc、simhei.ttf、simkai.ttf和simfang.ttf。 5.[Software.AddReg]部分 拷貝到Super WinPE的插件文件需要告知系統(tǒng)才會被正確調用,所以我們必須將其加上相應的注冊信息。這個部分即專門添加Software部分注冊信息,基本格式為“regType”、“regKey”、“regValue”、“regData”。參數(shù)“regType”用于指定注冊信息鍵值的數(shù)據(jù)類型,共有7種類型(表1),注意其中的“0x”必須要小寫,否則將無法被正確識別,“regKey”為注冊鍵目錄字符串,“regValue”為注冊鍵值的字符串,“regData”用于指定實際使用的數(shù)據(jù)。 由于Super WinPE系統(tǒng)中的注冊鍵值實際上基本可對應于WinXP的注冊鍵值,所以我們需要做的工作就是將WinXP中關于顯示字庫和輸入法的注冊信息導入到Super WinPE系統(tǒng)中。在你的WinXP系統(tǒng)中點擊“開始菜單→運行”,輸入“regedit”回車后啟動注冊表編輯器,在如下子鍵上點擊右鍵將其導出為文本文件備用(圖6): “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows NT\CurrentVersion”下的FontMapper、FontSubstitutes、FontLink、Fonts、GRE_Initialize和FontDPI子鍵,“HKEY_LOCAL_MACHINE\ SOFTWARE\Classes\CLSID”下的{529A9E6B-6587-4F23-AB9E-9C7D683E3C50}、{540D8A8B-1C3F-4E32-8132-530F6A502090}、{08CD963F-7A3E-4F5C-9BD8-D692BB043C5B}、{33C53A50-F456-4884-B049-85FD643ECFED}、{3CE74DE4-53D3-4D74-8B83-431B3828BA53}、{529A9E6B-6587-4F23-AB9E-9C7D683E3C50}、{A4B544A1-438D-4B41-9325-869523E2D6C7}、{B9931692-A2B3-4FAB-BF33-9EC6F9FB96AC}、{EBB08C45-6C4A-4FDC-AE53-4EB8C4C7DB8E}、{275C23E2-3747-11D0-9FEA-00AA003F8646}、{C04D65CF-B70D-11D0-B188-00AA0038C969}和{D66D6F99-CDAA-11D0-B822-00C04FC9B31F}子鍵。 下面我們來看如何使用導出的文本文件。打開從“CurrentVersion\GRE_Initialize”鍵值導出的GRE_Initialize.txt文件(圖7),按上文所說的格式將其改寫為[Software.AddReg]的部分。首先是GRE_Initialize鍵本身的默認值,由于數(shù)據(jù)類型“regType”是REG_SZ而且數(shù)據(jù)值為空(圖8),所以其數(shù)據(jù)類型為0x0。而其鍵值目錄“regKey”并不需要寫全,我們將“HKEY_ LOCAL_MACHINE\ SOFTWARE”的后面部分寫上即可。所以添加如下內容: [Software.Addreg] 0x0, "Microsoft\WindowsNT\CurrentVersion\GRE_Initialize" 接著我們將GRE_Initialize內其他鍵值都進行修改。如值0的數(shù)據(jù)類型為REG_SZ而又非空值,所以其數(shù)據(jù)類型為0x1。而其“regValue”和“regData”分別為“GUIFont.Facename”和“宋體”,故添加為: 0x1, "Microsoft\Windows NT\CurrentVersion\GRE_Initialize", "GUIFont.Facename", "宋體" 用此方法將上文所述導出的注冊鍵信息全部按格式添加到[Software.AddReg]部分。實際上我們向Super WinPE系統(tǒng)中拷貝的字庫文件有限,上述添加的鍵值中許多并非必須。但是這樣的處理方法簡單易行,你不需要費心去辨識那些鍵值,當然你也可以在熟悉理解WinXP注冊表信息后只編寫需要的部分,這樣可大大降低插件inf文件的體積。 6.[SetupReg.AddReg]部分 這個部分的語法格式與[Software.AddReg]部分完全一致。啟動注冊表編輯器,將“HKEY_LOCAL_MACHINE\ SYSTEM\ControlSet001\Control”下的“Keyboard Layouts\00000804”、“Keyboard Layouts\E0010804”及“FontAssoc”子鍵導出為文本文件,并依照第5步的做法按格式將信息添加到插件inf文件的[SetupReg.AddReg]部分。 7.[default.AddReg]部分 這個部分主要的語法格式與[Software.AddReg]部分完全一致。啟動注冊表編輯器,將“HKEY_CURRENT _USER\Keyboard Layout”下的“Preload”、“Toggle”及“Control Panel\Desktop”等子鍵導出為文本文件,同樣按第5步的做法按格式添加到插件inf文件的[default.AddReg]部分。 至此中文簡體插件的chinese.inf文檔編寫工作全部完成。實際上插件inf文檔的編寫還包括有其他部分,但編寫簡體中文語言插件并不需要,大家可對照上述編寫過程來學習其他部分。 8.導入插件 由于PE Builder導入插件必須使用cab壓縮包文件,所以需要先將chinese.inf文件打包為chinese.cab文件,筆者一般使用Cabnet Manager打包軟件(下載地址:http://download.pchome.net/utility/pack/3836.html),可使用鼠標右鍵菜單方便地添加cab壓縮包(圖9)。之后在使用PE Builder制作Super WinPE的配置插件步驟時,點擊窗口上的“Add”按鈕,在彈出窗口中選擇剛才制作的chinese.cab文件(圖10)。接著軟件會讓你給插件的目錄命名(圖11),命名后點擊“OK”按鈕,插件就會被導入到PE Builder中,由于在插件的[PEBuilder]部分的Enable參數(shù)為1,所以導入的插件已經(jīng)是激活狀態(tài)(圖12)。導入這個中文插件后繼續(xù)制作完成WinPE的ISO文檔,完成后來看看那些中文軟件的界面,亂碼都已經(jīng)消失,熟悉的中文回來了(圖13)。 (二)Nu2menu菜單的漢化 經(jīng)過上一步處理后發(fā)現(xiàn)Super WinPE的界面菜單依然是英文,且其位置安排也不盡如人意。要改進這一狀況,必須修改Nu2menu插件。上文說過,插件內一般有3種文件,其中XML文件就是系統(tǒng)的菜單,所以漢化菜單的工作實際上非常簡單,只是簡單地修改Nu2menu插件的XML文件就可以了。 用記事本打開Nu2menu插件的Nu2menu.xml文件,其菜單結構一目了然(圖14)。即使你完全不懂得XML文件的語法,也可以從文檔規(guī)律性的語句中輕易辨識出對應在Super WinPE中的菜單項。比如說文檔的第一段結構的部分是這樣的。 <MENU ID="Startmenu"> <MITEM TYPE="POPUP" MENUID="Programs">Programs</MITEM> </MENU> 這代表系統(tǒng)的一級菜單,其語法結構都是對稱形式的,非常簡單。如整個一級菜單從<MENU>開始,完成整個部分后則以帶斜線的</MENU>結束。其內具體菜單子項也是從<MITEM……>開始然后以</MITEM>結束,<MITEM……>和</MITEM>的中間部分則是在Super WinPE菜單中的具體顯示文字,如將上文中的“Programs”修改為“程序組”,那么在Super WinPE中菜單項目就改變了(注:前提是已經(jīng)使用了上面的中文插件,否則可能會有亂碼。圖15)。因此只要將這部分簡單修改為中文,菜單的漢化工作就完成了(注:“<MITEM TYPE = "SEPARATOR"></MITEM>”代表菜單中的分隔線)。 修改并制作完成后發(fā)現(xiàn)二級和三級菜單依然有部分是英語,這是因為Nu2menu插件只負責系統(tǒng)的一級和部分二級菜單,而更多菜單是由插件本身附帶的XML文件負責添加。那么修改插件附帶的XML文件即可,如打開插件bginfo的bginfo_nu2menu.xml文檔,同樣只要將<MITEM>和</MITEM>的中間部分修改成中文并存盤即可。另一種方法是將此XML文件的內容修改后再復制到Nu2menu.xml中,而插件附帶的XML文件刪除即可,這種處理方法更加集中方便,制作出的Super WinPE始終存在此插件的菜單項,但沒有激活集成插件的話,相應的菜單項目也是灰色不可選的(圖16)。經(jīng)過對所有被集成插件的XML文件修改漢化,我們制作出的Super WinPE終于是完全的中文界面了(圖17)。 三、系統(tǒng)的完善 經(jīng)過漢化的Super WinPE使用上已經(jīng)沒有太多問題了,不過依然有一些問題需要完善。 1.加入硬件驅動 使用PE Builder建立的Super WinPE是最小化的,只有基本的硬件驅動,而且盡管已經(jīng)集成了網(wǎng)絡插件,但實際上可能仍無法用它實現(xiàn)網(wǎng)絡功能,原因在于網(wǎng)卡驅動與具體的網(wǎng)卡可能不相配。要正常使用網(wǎng)絡,需要對應為你計算機的網(wǎng)卡在Super WinPE中加入驅動,仍然可以使用插件的形式,以3Com網(wǎng)卡驅動為例。建立inf文件,例如3Com.inf,其內容如下: [Version] Signature= "$Windows NT$" [PEBuilder] Name="3com" Enable=1 [SourceDisksFiles] 3com.sys=4,,1 ;將3Com.sys拷貝至system32中 3com32.inf=20,,1 ;將3Com32.inf拷貝至i386\inf目錄中 將文件打包為cab文件,導入PE Builder中后會在plugin目錄中建立子目錄,然后拷貝網(wǎng)卡驅動3com.sys和3com32.inf至此目錄下。在制作Super WinPE時激活此插件即可使用3Com的網(wǎng)卡驅動。 2.快速修改鏡像 用PE Builder制作完成的ISO鏡像大約200MB左右,刻錄200MB的小光盤恰好合適,但如刻錄一張700MB的普通光盤則未免浪費空間。那么最好集成更多的軟件工具,但是否又需重新制作呢?直接使用ISO工具修改即可。不過由于此ISO鏡像是使用ISO-9660:1999(version 2)文件系統(tǒng)標準,必須作出相應設置才能保證ISO文件的正確結構。下面的演示中我們將替換Super WinPE的背景墻紙,并為系統(tǒng)添加一個綠色軟件WinRAR。 使用軟件UltraISO打開鏡像,首先調整ISO文件的格式。點擊菜單“文件→屬性”,在彈出窗口中依次選擇“Joliet光盤文件系統(tǒng)標準→Windows/Unix(31)→擴展(110)”(圖18)。在硬盤上準備一張分辨率為800×600的BMP圖片,將文件名改為“NU2”,打開ISO文件的“I386\ system32”,使用鼠標右鍵將剛準備好的NU2.bmp文件替換該目錄下的同名文件(圖19)。這樣系統(tǒng)背景墻紙則已經(jīng)改變(圖20)。同樣道理,對于無需修改注冊表的綠色軟件一樣可以編輯ISO文件集成到系統(tǒng)中,無需編寫插件。打開ISO鏡像文件的Progr-ams目錄,使用鼠標右鍵將硬盤上已有的WinRAR安裝文件夾添加到其中。然后將ISO鏡像文件中“Programs\ NU2MENU”目錄下的nu2-menu.xml文件提取出來,用文本編輯器打開,在<MENU ID="Programs">和</MENU>之間添加如下行(注:中間無換行): <MITEM TYPE="ITEM" DISABLED="@Not(@FileExists(@GetProgramDrive()\Programs\winrar\winrar.exe))" CMD="RUN" FUNC="@GetProgramDrive()\Programs\winrar\winrar.exe">winrar</MITEM> 存盤后再覆蓋ISO鏡像中的nu2menu.xml文件,這樣就可在系統(tǒng)菜單下使用WinRAR了(圖21)。 |
|