Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
有那位先進:
知道如何在Windows 3.1或Windows 95下,使用那些函數(在那個DLL),可在程式中自動切換各種輸入法,例如注音'倉頡輸入法? 使用Visual C++ 1.52, 請不吝指教,Thanks you!!
關於這個問題, 我曾分別在3.1 與 95 試過, 以下是我目前解法的綱要說明, 請您參考看看:
cwindow 3.1
如果要直接切換到某一種輸入法, 以 WINNLS.DLL中有一個export函式叫 ImpSetIme() 可以直接切換到某一種輸入法。
切換到中文輸入法, 先以 WINNLS.DLL中 的 export 函式 ImpGetIme() 偵測是否某個中文輸入法已經 Active 在視窗上, 如果沒有, 再附加一個 Ctrl + Space 的鍵盤事件到 SystemQueue後(就像是使用者按一次 Ctrl+Space 組合鍵), 讓 CWindows 內部的 IME 管理機制接手, 就可以切換到中文輸入法了。
windows 95
對中文輸入的機制有比較 CWin3.1完整的支援, 這部分的參考資料在MSDN一月份的光碟片中有不錯的說明, 如果只是要切換到中文輸入法:
![]() |
1. GetKeyboardLayOut() 取得目前執行段(Thread) 的 Keyboard Layout |
![]() |
2. 將取得的 Keyboard Layout Handle 傳入ImmIsIme()(IMM.Dll 的 Export 函數), 依傳回值判斷是否中文輸入法作用中 |
![]() |
3. 如果中文輸入法目前沒有作用, 呼叫 ImmSimulateHotKey()摸擬一次輸入法切換熱鍵 |
雖然您問的的是VC++, 不過, 下列的 Delphi 程式例子的作法應該仍值得參考:
procedure TCEdit.ToChinese; var hklCurrent: HKL; begin (* 取得目前的 Keyboard Layout Handle *) hklCurrent := GetKeyboardLayOut(0); (* 如果中文輸入法不是作用中 *) if not ImmIsIME(hklCurrent) then (* 摸擬一次中英切換鍵, 切換成中文輸入法 *) ImmSimulateHotKey(Handle, IME_THotKey_IME_NonIME_Toggle); {$70} end; { TCEdit.ToChinese }
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |