2011年2月16日 星期三

在Windows CE 作業系統中建立多國語系鍵盤

目的:
在Windows CE作業系統中內建為United States 101 keyboard,在不支援的語系中我們將協助客戶自行產生其他語系的Keyboard Layout.
時間:90 分鐘
工具:
  Keyboard Layout Generator tool (Kbdgen.exe) 利用此工具來擷取Windows XP的Keyboard Layout來產生Windows CE 輸入語系的Source Codes.
路徑:C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386\kbdgen.exe
  Microsoft Keyboard Layout Creator(MSKLC.exe)利用此工具來驗証實作的Keyboard Layout是否正確.
網址:http://msdn.microsoft.com/en-us/goglobal/bb964665.aspx
實作:
我們將利用Windows XP內建的Keyboard Layout來產生在Windows CE作業系統上所需要的Source Code.
1.在Windows XP作業系統上開啟regedit.exe工具,並將找到希臘文的路徑.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408]
"Layout File"=”KBDHE.DLL”

PS:Layout Files中的值為Windows XP中所支援的檔案名稱,預設路徑在C:\Windows\System32之中.
2.利用Windows CE的Keyboard Layout Generator tool來產生Source Files.
   A.開啟command line 工具並將路徑切換至C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386\
   B.執行【kbdgen.exe "C:\WINDOWS\system32\kbdhe.dll" -o Kbdhe -i 00000408】
   C.在執行目錄下會產生三個檔案
   KbdheDL.cpp (Device layout)
   KbdheIL.cpp (Input language)
   Kbdhe.reg (registry files)
3.利用英文Keyboard Layout來建立希臘的Keyboard Layout.
   A.請在C:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS底下將KEYBD資料夾複製到%_TARGETPLATROOT%\SRC\DRIVERS下,利用記事本開啟Dirs檔案並加入Keybd目錄名稱到檔案.
   ※%_TARGETPLATROOT%路徑為C:\WINCE600\PLATFORM\DEVICEEMULATOR\
   B.將目錄移至”%_TARGETPLATROOT%\SRC\DRIVERS\KEYBD\DEVICELAYOUTS\PS2_AT”除” 00000409”之外刪除其他所有目錄,並將”00000409”目錄名稱改為”00000408”。
   C.開啟Dirs刪除所有內容只加入00000408文字,如下圖
   D.刪除00000408目錄下的kbdus.cpp檔案並將上步驟2產生的KbdheDL.cpp複製到此並改名稱為”Kbdhe.cpp”
   E.將kbdus.def檔案改名為kbdhe.def
   F.利用記事本開啟kbdhe.def並作下列修改,修改完畢請存檔離開.
      LIBRARY kbdhe
      EXPORT 
      PS2_AT_00000408
      IL_00000408

G.利用記事本開啟Sources並作下列修改,修改完畢請存檔離開
   ==============修改部分為粗體==============
   TARGETDEFNAME=kbdhe
   TARGETNAME=$(TARGETDEFNAME)_lib
   TARGETTYPE=LIBRARY
   DEFFILE=$(TARGETDEFNAME).def
   WINCETARGETFILE0=$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\$(TARGETDEFNAME).def
   PREPROCESSDEFFILE=1
   RELEASETYPE=PLATFORM
   WINCEOEM=1
   SOURCES= \
       Kbdhe.cpp  \
   ==========================================

4.請再換目錄至%_TARGETPLATROOT%\SRC\DRIVERS\KEYBD\INPUTLANGS將目錄下除0409之外全部刪除並將0409改名稱0408.
   A.開啟Dirs刪除其他目錄名稱只保留0408
   B.刪除0408目錄中的檔案il_0409.cpp,複製步驟2.產生的KbdheIL.cpp到目錄並改名為il_0408.cpp
   C.利用記事本開啟Sources並作下列修改,修改完畢請存檔離開
      TARGETNAME=InputLang_0408
      TARGETTYPE=LIBRARY
      SOURCES= \
    il_0408.cpp \

5.將目錄切換至%_TARGETPLATROOT%\SRC\DRIVERS\KEYBD\DLL將目錄下除KBD8042US之外全部刪除並將KBD8042US改名稱KBD8042HE.
   A.開啟Dirs刪除KBD8042US之外的其他目錄名稱,並將KBD8042US改成KBD8042HE
   B.開啟KBD8042HE目錄編輯Sources檔案並作下列修改,修改完畢請存檔離開
   DOSYSGEN=1
   SYNCHRONIZE_DRAIN=1
   DEFFILE= $(_TARGETPLATROOT)\SRC\inc\Kbdhe.def
   TARGETNAME=Kbd8042HE
   TARGETTYPE=DYNLINK
   TARGETDEFNAME=Kbd8042HE
   DLLENTRY=DllMain
   RELEASETYPE=PLATFORM
   WINCEOEM=1
   TARGETLIBS=\
   $(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
   $(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \
   WINCETARGETFILE0=$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\$(TARGETDEFNAME).def
   SOURCELIBS=\
    $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\PS2_8042_KbdCommon.lib \
    $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\LayoutManager.lib \
    $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\KeybdIst.lib \
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\kbdhe_lib.lib \
    $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\NumPadRmp.lib \
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\InputLang_0408.lib \
   SOURCES=\
    PDDList.cpp

6.在C:\WINCE600\PUBLIC\COMMON\OAK\INC目錄中拷貝kbdus.def到$(_TARGETPLATROOT)\SRC\INC\目錄之下, 並更名為kbdhe.def,利用記事本將kbdhe.def編輯,將內容修改如下:
   IL_00000408
   PS2_AT_00000408
   *(_TARGETPLATROOT 路徑為C:\WINCE600\PLATFORM\DEVICEEMULATOR)
7.在PB中選擇「Build」-> 「Open release directory in build windows 」將目錄切換到C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\KEYBD 鍵入Build –c 去編輯Keyboard Layout 程式。
8.完成後Keyboard layout檔案會產生在C:\WINCE600\PLATFORM\DEVICEEMULATOR\target\ARMV4I\debug目錄下,請將Kbd8042HE.dll拷貝到C:\WINCE600\PLATFORM\DEVICEEMULATOR\FILES目錄。
9.設定Platform.reg檔案設定希臘鍵盤設定.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Layouts\00000408]
"Layout File"="Kbd8042HE.dll"
"Layout Text"="Greek Input Language"
"PS2_AT"="Kbd8042HE.dll"
[HKEY_CURRENT_USER\Keyboard Layout\Preload\2]
@="00000408"
10.設定Platform.bib 加入keyboard layout檔案到Run-time image 之中.
Kbd8042HE.dll         $(_FLATRELEASEDIR)\Kbd8042HE.dll          NK
11.Rebuild Windows CE Image.
12.利用Windows CE 6.0 模擬器來測試Keyboard Layout功能.