用VB讀取和控制Windows的中文輸入法

發表于:2007-07-14來源:作者:點擊數: 標簽:
object.IMEMode [= value] value 的設置值包括: 設置 描述 0 無(缺省設置)。該值表明無 IME 控制。當 IMEMode 屬性被設置為 0 時,可以使用 IMEStatus 函數確定當前的 IME 狀態。 1 IME 打開。該數值表明 IME 已經被打開,可以輸入漢字或日文字符。該設置
object.IMEMode [= value]  

value 的設置值包括:  

設置 描述  
0 無(缺省設置)。該值表明"無 IME 控制"。當 IMEMode 屬性被設置為 0 時,可以使用  
IMEStatus 函數確定當前的 IME 狀態。  
1 IME 打開。該數值表明 IME 已經被打開,可以輸入漢字或日文字符。該設置僅對日文、簡體漢
字和繁體漢字 IME 有效。  
2 IME 關閉。該模式表明 IME 被關閉,因此對象將處于英文輸入模式。該設置僅對日文、簡體漢
字和繁體漢字 IME 有效。  
3 IME 被禁止。該模式類似于 IMEMode = 2,區別僅在于數值 2 沒有禁止 IME。在本設置下,用戶
不能夠通過鍵盤將 IME 打開,而且 IME 浮動窗口被隱藏。該設置僅對日文 IME 有效。  
4 日文平假名雙字節字符(DBC)。該設置僅對日文 IME 有效。  
5 日文片假名 DBC. 這些設置僅對日文 IME 有效。  
6 日文片假名單字節字符 (SBC)。這些設置僅對日文 IME 有效。  
7 字母數字 DBC。該些設置僅對日文 IME 有效。  
8 字母數字 SBC。該些設置僅對日文 IME 有效。  
9 Hangeul DBC。該些設置僅對朝鮮語 IME 有效。  
10 Hangeul SBC。該些設置僅對朝鮮語 IME 有效。  

下面還有一篇相關內容的文章  
資料來源:碧波山莊Visual Basic http://ctsvb.126.com  
VB讀取和控制Windows的中文輸入法  
在Windows中我們可以用"Ctrl+Shift"鍵來調入或切換中文輸入法,但是這樣做每次都是使位于
輸入法列表頂端的那個輸入法首先被調用。通常我們都要連續按好幾次"Ctrl+Shift"才能將習慣
的輸入法調出。我編制了一段小程序,通過它可以把任意一個輸入法放在輸入法列表的頂端。  
  它的原理是:使用LoadKeyboardLayout函數可以改變輸入法的順序,只要在第一個參數中傳遞
目標輸入法的KeyboardlayoutName,第二個參數用KLF_REORDER就可以了。  
  例如,aa = LoadKeyboardLayout(″00000409″, KLF_REORDER) 使英文變成第一。那怎樣獲得
KeyboardlayoutName呢?因為使用GetKeyboardLayoutname可以返回當前輸入法的
KeyboardlayoutName,所以我們可以先用GetKeyboardLayoutList 函數來取得所有輸入法,再用
activateKeyboardlayout()函數設置當前輸入法,最后就可以得到它的KeyboardlayoutName了。具體步
驟如下:  
  打開VB后選擇標準的EXE文檔,在Form1上添加一個Combobox和一個command控件,輸
入以下程序。  
  ′以下的API函數用于輸入法操作  
  Private Declare Function GetKeyboardLayoutList Lib ″user32″ _  
  (ByVal nBuff As Long, lpList As Long) As Long  
  Private Declare Function ImmGetDescription Lib ″imm32.dll″ _  
  Alias ″ImmGetDescriptionA″ (ByVal hkl As Long, _  
  ByVal lpsz As String, ByVal uBufLen As Long) As Long  
  Private Declare Function ImmIsIME Lib ″imm32.dll″ (ByVal hkl As Long) As Long  
  Private Declare Function ActivateKeyboardLayout Lib ″user32″ _  
  (ByVal hkl As Long, ByVal flags As Long) As Long  
  Private Declare Function GetKeyboardLayout Lib ″user32″ (ByVal dwLayout As Long)As Long  
  Private Declare Function GetKeyboardLayoutName Lib ″user32″ Alias _  
  ″GetKeyboardLayoutNameA″ (ByVal pwszKLID As String) As Long  
  Private Declare Function LoadKeyboardLayout Lib ″user32″ Alias ″LoadKeyboardLayoutA″ _  
  (ByVal pwszKLID As String, ByVal flags As Long) As Long  
  Const KLF_REORDER = &H8  
  Private NoOfKBDLayout As Long, i As Long, j As Long  
  Private hKB(24) As Long, BuffLen As Long  
  Private Buff As String  
  Private RetStr As String  
  Private RetCount As Long  
  Private kln As String  
  Private Sub Command1_Click()  
  If Combo1.ListIndex = -1 Then′如果用戶尚未選擇輸入法,顯示出錯信息  
  MsgBox ″請先選擇一個輸入法″  
  Exit Sub  
  End If  
  ′改變輸入法順序  
  kln = String(8, 0)  
  ActivateKeyboardLayout hKB(Combo1.ListIndex), 0  
  res = GetKeyboardLayoutName(kln)  
  res = LoadKeyboardLayout(kln, KLF_REORDER)  
  ActivateKeyboardLayout hCurKBDLayout, 0  
  End Sub  
  Private Sub Form_Load()  
  Buff = String(255, 0)  
  hCurKBDLayout = GetKeyboardLayout(0) ′取得目前的輸入法  
  NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) ′取得所有輸入法  
  ′ReDim layoutlist(NoOfKBDLayout) As String  
  For i = 1 To NoOfKBDLayout  
  If ImmIsIME(hKB(i - 1)) = 1 Then ′中文輸入法  
  BuffLen = 255  
  RetCount = ImmGetDescription(hKB(i - 1), Buff, BuffLen)  
  RetStr = Left(Buff, RetCount)  
  Combo1.AddItem RetStr  
  Else  
  RetStr = ″English (American)″ ′英文輸入法  
  Combo1.AddItem RetStr  
  End If  
  Next  
  ActivateKeyboardLayout hCurKBDLayout, 0 ′恢復原來的輸入法  
  End Sub  
  運行后,在combobox中選擇目標輸入法,按下command即可。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97