用 C# 控制 Win7 輸入法
參考網址 - VISTA 與輸入法程式介面 文/黃忠成
http://www.dotblogs.com.tw/code6421/archive/2010/09/27/17909.aspx
(感謝上述作者提供此方便的程式,範例可從網站中下載)
由於舊的win32應用程式和.NET FRAMEWORK 2.0有些無法在VISTA以後的作業系統順利執行。控制win7作業系統輸入法亦然,但利用上述參考網址的範例在Visual Studio 2012 Desktop中開啟並執行後,會發生程式直接關閉的情形。輸出訊息最後一行如下所示:
'[2672] VistaIMEHelperNet.vshost.exe: Managed (v4.0.30319)' 程式以返回碼 0 (0x0) 結束。
點擊第一個按鈕"Fetch Input Profile List"後列出所有安裝的輸入法,但只限中文輸入法。若安裝多國不同語言的輸入法,在Form1.cs中 button1_Click函式裡TSFWrapper.GetInputMethodList(langIDs[0])的langIDs可用其他值帶入,langIDs = TSFWrapper.GetLangIDs()可取得所有語言的ID。
例如:langID中文 = 1028;英文 = 1033;日文 = 1041
點選按鈕一列出所有安裝的輸入法 |
點擊第二項與第三項按鈕分別可切換輸入法與設定回預設英文輸入法。
不過將此做法用於非GUI的方式,也就是非windows form的方式,而是純console介面來呼叫第二與第三個按鈕function會出現crash。以下為跳出錯誤訊息視窗的內容:
類型 'System.Runtime.InteropServices.COMException' 的未處理例外狀況發生於 VistaIMEHelperNet.exe
其他資訊: 災難性的失敗 (發生例外狀況於 HRESULT: 0x8000FFFF (E_UNEXPECTED))
目前尚未得出單純用console端去存取輸入法。可以參考下面連結使用sliverlight去call輸入法控制的dll檔。
原作者在另一篇是兩年後的更正版,並用Sliverlight呼叫此dll範例
http://www.dotblogs.com.tw/code6421/archive/2010/09/27/17916.aspx
舊有MSDN上有被提及的是在System.Windows.Forms中底下的三個函數
InputLanguage 提供方法和欄位以便於管理的輸入的語言。 這個類別無法被繼承。
InputLanguageChangedEventArgs 提供 InputLanguageChanged 事件的資料。
InputLanguageChangingEventArgs 提供 InputLanguageChanging 事件的資料。
只能在Win7中取得輸入法訊息,不能夠做修改輸入法的動作。
留言
張貼留言