基於中文Windows平台的縱橫碼輸入系統的實現技術
蘇州大學縱橫漢字信息技術研究所
呂強、王紅玲、張玉華
一、引言
基於Windows平台的縱橫碼輸入系統,是一個專為Windows中文環境提供縱橫碼漢字輸入的系統。該系統全部使用Windows提供的標準API調用,在應用程式這一層次上實現了輸入功能,因此其代碼無須任何修改便可以運行於所有的Windows中文平台(包括中文Windows
3.1,中文Windows3.2,中文Windows95,中西方Windows與Cstar或RichWin等的組合)。系統提供了單字、詞組聯想和自定義輸入功能;同時,系統還提供了一些配套程式,用於維護自定義碼表等。系統具有安裝簡單、操作方便、靈活等特點,與通過使用Windows提供的輸入法生成器生成的輸入法相比較,具有碼表結構更靈活,詞條數目更大,系統功能更全面等優點。
二、系統結構
ZH1、ZH2、ZH3、ZH4、ZH5、LX2、LX3、LX4、LX5是縱橫碼輸入系統所用的碼表,其中ZH1∼ZH5分別表示單字,二字詞,三字詞,四字詞及多字詞碼表,它們的結構如下:碼表以項為單位,一項表示縱橫碼和它對應的字或詞條。每一項中縱橫碼佔3個字節,不足3位以0xFF補足。縱橫碼以BCD碼形式存放,接著存放漢字內碼。對於ZH1∼ZH4,漢字存放沒有結束符,而ZH5即多字詞碼表(五字詞以上)由於不能確定詞組的長度,因此表項為不等長,每一項以“0xFF”為結束符。LX2、LX3、LX4、LX5是系統聯想碼表,其資料結構如圖1所示。(圖2所示為ZH5結構)
圖1 聯想碼表資料結構
圖2 碼表資料結構
另外,系統中還使用了兩個碼表:zdyz和zdyc。這兩個文件是由系統生成,由使用者添加內容,是專用於存放自定義字詞的文件。“zdyz”存放字,結構與“zh1”相同;“zdyc”存放詞組,結構同“zh5”相同,每項以“0xFF”結束。
三、查表算法
系統收到輸入碼結束後,即開始查表。如果結束鍵是[/]或空白鍵,對“zdyz”和“zh1”進行操作;如果結束是[*]鍵,則對“zhyc”、“zh2”、“zh3”、“zh4
”、“zh5”進行操作。算法如下:首先將輸入碼緩沖區(InputCodeBuf)中的縱橫輸入碼由ASCII碼轉化成壓縮的BCD碼,放入code資料組中。順序開啟文件,將文件指針IpbMb〔i〕指向文件頭,指針所指的連續的三個字節送入code1數組中,將code與code1的內容作比較。如果相同,將文件對應的那一項漢字內碼送入輸出緩沖區(OutputBuf)中。如為漢字,則三個字節的縱橫碼接下的二個字節既為所需漢字;如為詞組,又分為兩種情況:五字詞以下,則按一個漢字佔兩個字節來看,有幾個漢字就是它的兩倍字節,項與項中間沒有分隔符;五字詞及五字詞以上,項與項之間用0xFF分隔。不管兩個數組中的內容是否匹配,文件指針都必須向後移過一項。查找匹配過程一直進行到所有文件都查找完畢。最後,所有與輸入碼相符的漢字或詞組均放在OutputBuf中,由顯示輸出模塊顯示。
四、鍵盤截取
1.Windows消息機制
Windows通過發送消息與程式通信。所有的Windows程式都在Windows()函數中建立消息循環。該循環從應用程式的消息隊列中讀取尚未處理的消息,並再將該消息分配回Windows,由Windows以該消息作為參數調用應用程式的視窗函數。可通過調用函數GetMessage()讀取消息。在消息循環內,共調用了2個函數。第一個是API函數TranslateMessage()。該函數負責將Windows生成的虛鍵盤代碼轉換成字符消息。讀取和翻譯完消息後,還應將其送至Windows,具體可通過API函數DispathchMessage實現。Windows會一直保存該消息,直到它被傳遞給應用程式的視窗函數。消息循環一旦中止,Windows()函數也隨這結束,將程式中止時所產生的返回碼返回給Windows。
該系統Windows消息循環主要處理了WM_CHAR,WM_LX,WM_SEPERATOR,WM_DINGYI等消息,其中WM_LX,WM_SEPERATOR,WM_DINGYI消息是本系統自定義的消息。
2.控鍵轉義實現
該系統設置了一些快捷鍵來實現某種功能,如聯想功能,標點功能,自定義功能等。系統使用的動態鏈接庫為“hook.dll”。這一模塊的功能是截取鍵盤上的輸入鍵,將輸入鍵進行過濾,濾掉系統不使用的鍵,保留系統所用鍵。再對特殊鍵進行特殊操作,如[Ctrl]+[1](小鍵盤)作為聯想功能的快捷鍵,它所發的按鍵消息為自定義的WM_LX”消息;[Ctrl]+[2](小鍵盤)為自定義單字、詞組的快捷鍵,發送“WM_DINGYI”消息;[Ctrl]+[3](小鍵盤)為標點輸入的快捷鍵,發送“WM_SEPERATOR”消息。對於非特殊按鍵,則一律將之轉換成對應的字符,向主程式發出“WM_CHAR”消息。由主程式對各類消息進行處理。對於其他按鍵,由操作系統按原按鍵消息進行處理。
該系統另一特點是,完全使用小鍵盤進行輸入。由於在Windows中對按鍵以虛鍵碼來處理。對於小鍵盤上的鍵,當NumLock鍵開啟時的虛鍵碼同關閉時的虛鍵碼是不同的。要在忽略NumLock鍵的情況下唯一確定小鍵盤上的鍵,只能使用這些鍵的掃描碼,因此在動態鏈接庫中,對小鍵盤上的鍵做了特殊處理,取得鍵的掃描碼將之轉化為對應的ASCII碼,並向應用程度視窗發送WM_CHAR消息,由主程式處理。
五、結束語
該輸入系統的框架結構、功能已基本完成,但在界面設置方面有待完善。限於編程語言的限制,以後的發展趨勢應是現可視化、圖形化方向發展,應從16位編程向32位編程發展。
返回上頁 |