程序中怎么改变textbox文本框输入法?

解决方案 »

  1.   

    先用GetKeyboardLayoutList列举输入法的id,然后通过ActivateKeyboardLayout激活需要的输入法,
    输入法的名称可以通过ImmGetDescription获取
      

  2.   

    Option Explicit
    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
    Const KLF_REORDER = &H8
    Dim i&, IMEcounts&, Buff$, RetStr$, hKB&(24)  'IMEstr$()Private Sub Form_Load()
       Buff = String(255, 0)
       IMEcounts = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法
       For i = 1 To IMEcounts
          'ReDim Preserve IMEstr(i)
          If ImmIsIME(hKB(i - 1)) = 1 Then '中文输入法
             Call ImmGetDescription(hKB(i - 1), Buff, 255)
             RetStr = Mid(Buff, 1, InStr(Buff, Chr(0)) - 1)
          Else
             RetStr = "English (American)" '英文输入法
          End If
          'IMEstr(i) = RetStr
          Combo1.AddItem RetStr
       Next i
       Call ActivateKeyboardLayout(hKB(0), KLF_REORDER)
    End SubPrivate Sub Combo1_Click()
       Call ActivateKeyboardLayout(hKB(Combo1.ListIndex), KLF_REORDER)
    End Sub'Private Sub Text1_GotFocus()
    '   Call ActivateKeyboardLayout(hKB(0), KLF_REORDER)
    'End Sub'Private Sub Text2_GotFocus()
    '   Call ActivateKeyboardLayout(hKB(3), KLF_REORDER)
    'End Sub