2008年8月18日 星期一

WinCE 中文輸入法

Microsoft 向來保持其一貫作風, 凡是 Microsoft 隨 OS 所附贈之軟體, 其功能皆非最強, 都是以夠用就好為主, 也因 Microsoft 這樣的作風, 也分了許多杯羹給軟體開發廠商.

以 Microsoft 原版中文手寫輸入法而言, 總覺得有些缺憾,

其一, 手寫區太小, 且其手寫區之 UI 偶爾會有異常筆劃出現
其二, 手寫辨識後, 無法進行模糊辨識後之選字, 偶有辨識錯誤之情形發生

雖有缺憾, 但如前言, 已夠一般使用, 雖說缺憾, 但其仍有優點, 就是和設計直接調用 SIP 輸入法的軟體相容性最高, 例如 MioMap 之快速搜尋, 手寫輸入都是直接調用 SIP 輸入法, Microsoft 原版中文手寫輸入除了支援 MioMap 外, 最重要的 Enter 鍵都可正確送出.

如前述, 因為 Microsoft 的留杯羹給別人, 以中文輸入法而言, 就造就了很多軟體廠商開發更人性化的輸入法介面, 例如本文所介紹的蒙恬筆.

蒙恬筆 for WinCE 區分為兩種安裝模式, 一種為執行檔方式, 一種則為直接嵌入 SIP 中, 以直接嵌入 SIP 中所需檔案有,

AI.txt
ppb5bopo.dll
ppb5hk.dll
PPENBIG.BIN
ppregsvr.exe
ppsipb5.dll
Recogbig.dll
touchp.dll

等八個檔案, 有些 WinCE 機器可能於 Hard Reset 後, 於 \Windows 內經安裝的程式及檔案可能不見, 系統恢復回出廠值, 此時便需以人工的方式將上述八個檔案複製回 \Windows 目錄內, 同時也需更新 Registry 內容, 增加蒙恬筆相關輸入法設定,

[HKEY_CLASSES_ROOT\CLSID\{35722691-ae04-11d0-a4f8-00aa00a749b9}]
"Setting_AI"=dword:00000001
"Setting_WritingSpeed"=dword:00000003
"Setting_PenWidth"=dword:00000002
"Setting_PenColor"=dword:00000000
"Setting_ShapeTypeMix"=dword:0000001f
"Setting_ShapeTypeGB"=dword:00000009
"Setting_ShapeTypeBig5"=dword:00000007
"Setting_WhichShapeType"=dword:00000001
"Setting_UseType"=dword:000005e6
"Setting_RecogType"=dword:0000017f
@="蒙恬輸入法"

[HKEY_CLASSES_ROOT\CLSID\{35722691-ae04-11d0-a4f8-00aa00a749b9}\IsSIPInputMethod]
@="1"

[HKEY_CLASSES_ROOT\CLSID\{35722691-ae04-11d0-a4f8-00aa00a749b9}\DefaultIcon]
@="\\Windows\\ppsipb5.dll,0"

[HKEY_CLASSES_ROOT\CLSID\{35722691-ae04-11d0-a4f8-00aa00a749b9}\InProcServer32]
@="\\Windows\\ppsipb5.dll"

以上八個程式, 約需佔用儲存記憶體空間約 2.6Mb, 對於 WinCE 儲存記憶體之調整增加, 相對的將減少程式記憶體空間, 而這八個程式中, 又以 PPENBIG.BIN 佔用空間最大, 約 2.2Mb, 當然可透過修正方式調整路徑, 將最佔空間的 PPENBIG.BIN 改放至 SD Card 內, 如欲讓 PPENBIG.BIN 改至 SD Card 內, 可修改 Recogbig.dll 內之啟動 PPENBIG.BIN 路徑即可.

關於 Microsoft 原版中文輸入法(注音輸入法, 倉頡輸入法, 手寫輸入), 大部份 WinCE 的機器都不會附加, 而這些輸入法則可透過 Microsoft Platform Builder 生成, 生成後套入所需之 WinCE 機器內即可.

Photobucket
<圖一>SIP 內嵌式蒙恬筆

Photobucket
<圖二>Microsoft 原版中文輸入法


View My Stats

隱藏 WinCE 的 Taskbar

WM5/6 或 WinCE 的軟體, 當需要全螢幕顯示時, 就需要將系統工作列(Taskbar)隱藏, 最常見的系統工作列隱藏方法, 便是找到 Taskbar windows, 並透過系統函數將它隱藏, 以 C++ 語言為例,

hTaskBarWnd = FindWindow(_T("HHTaskBar"), NULL);
ShowWindow(hTaskBarWnd, SW_HIDE);

還有另一種作法, 也是找到 Taskbar windows, 並將它搬離螢幕範圍, 例如下述將 Taskbar windows 搬至螢幕下方超過螢幕解析度之範圍,

MoveWindow(hTaskBarWnd, rc.left, rc.bottom, rc.right-rc.left, rc.bottom-rc.top, TRUE);

但在 WinCE 環境中, 有些軟體即使將 Taskbar 隱藏了, 但仍會發生並非真正全螢幕顯示情形, 問題大都出在沒有設定螢幕工作範圍, 而形成工作列雖被隱藏, 但程式執行時, 仍無法將工作視窗擴大至 Taskbar 原有之位置, 下述範例說明將 Windows CE 之視窗工作範圍設至全螢幕範圍, 

SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
SystemParametersInfo(SPI_SETWORKAREA, 0, &rc, SPIF_UPDATEINIFILE);

以 TomTom 6 為例, TomTom 6 原本僅適用於 WM5 環境, 有人將它移植至 WinCE 環境中, 但於 WinCE 環境中使用 TomTom 即需將 WinCE 的工作列設定為自動隱藏, 有些人使用隱藏 Taskbar 程式隱藏工作列, 但執行 TomTom 6 於導航畫面回主選單時, 會出現嚴重的程式錯誤並異常結束程式, 其主因為有些隱藏 Taskbar 程式將視窗工作範圍設至全螢幕範圍, 但目前 TomTom 6 並無法於 WinCE 中以全螢幕範圍工作.

話說山不轉路轉, 路不轉人轉, 如果覺得設定工作列自動隱藏, 螢幕底部會有礙眼的 5 pixels gray bar, 二種方法可以解決,

1. 使用上述兩種隱藏工作列的方式, 可除去礙眼的 5 pixels gray bar, 但前提是工作列需設定自動隱藏, 此時 TomTom 螢幕工作範圍為 (螢幕底部 - 5 pixels) 範圍, 如 480 x 272 解析度, 便是 480 x 267.

2. 除了使用上述兩種隱藏工作列的方式外, 也可設定視窗工作範圍至 (螢幕底部 - 1 pixel), 這樣一來, TomTom 便何趨近全螢幕顯示, 如 480 x 272 解析度, 便是 480 x 271, 如下述 C++ 語法

SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)-1);
SystemParametersInfo(SPI_SETWORKAREA, 0, &rc, SPIF_UPDATEINIFILE);

這個方法唯一的缺點, 就是導航道路畫面和導航指示畫面間的空隙加大, 會有約 4 pixels 的空間出現.

Photobucket
<圖一>自動隱藏 Taskbar 時, 螢幕下方會有 5 pixels 的 gray bar

Photobucket
<圖二>隱藏 Taskbar 並將工作區加大, 螢幕下方 gray bar 不見了

透過同樣的程式技巧, 也可運用於某些無法全螢幕作業的軟體,

Photobucket
<圖三>螢幕上方有 explorer 的命令列

Photobucket
<圖四>隱藏螢幕上方的 explorer 的命令列, 達成全螢幕效果


View My Stats