先引用幾份資料:
Windows XP中新增了一套相容性階層 (但我曾經在 Windows 2000 的光碟中發現改相容性小工具,那應該是最早的實作) 。而後來強化這套相容性階層,作了 AppLocale 這個公用程式。這個公用程式主要強化相容性階層,新增了一個參數 #ApplicationLocale (其餘參數請參考資料 1.)。設定方法呢,是在系統的環境變數內設定的 (常見的有 PATH, WINDIR 一類的,命令列執行 set 列出) ,有一個 __COMPAT_LAYER 的變數呢,就是相容性階層的設定。
假如今天在命令列下了 set __COMPAT_LAYER=Win98 640x480,即會將目前的相容性階層設為 Win98 相容, 解析度 640x480 模式。而後以命令列執行各類程式都會依照 __COMPAT_LAYER 的設定,由系統層面來作相容性的處理。
安裝了 AppLocale 後,__COMPAT_LAYER 新增了參數 #ApplicationLocale。於是要讓非 Unicode 程式使用指定字碼表的方法也很簡單,先 set __COMPAT_LAYER=#ApplicationLocale,再 set AppLocaleID=(字碼表LCID) (LCID 請參考資料 3.),這樣執行程式系統層便會以這些資料來作適當的轉換以完成工作。所以說 AppLoc.exe 也只不過是一個設定環境變數的工具,其實我們也可以手動設定的。(注意一下,若是 __COMPAT_LAYER 有多個設定,請以空格隔開。如果有包含 #ApplicationLocale,務必讓他排在第一順位,執行才會正常)
總結一下,如果要開啟 C:\test.exe 並以 Win2000 相容性模式、簡體中文字碼表的方式啟動,則在命令提示字元依序下以下指令即可:
set __COMPAT_LAYER=#ApplicationLocale Win2000
set AppLocaleID=804
C:\test.exe
附:以下是將原 LocaleStart.vbs 改寫成 JScript 形式的練習:
容我在這說幾句:WScript 的 JScript 跟網頁上常用的 JavaScript 有些不一樣,應該是版本的問題。前者不但 Array 是使用 () 而非 [],Array 也沒有 .join() 等方法,有點難以適應。
沒有留言:
張貼留言