'例1:取得目前所有的输入法
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 Sub Form_Load()
Dim NoOfKBDLayout As Long, i As Long, j As Long
Dim hKB(24) As Long, BuffLen As Long
Dim Buff As String
Dim RetStr As String
Dim RetCount As LongBuff = String(255, 0)
hCurKBDLayout = GetKeyboardLayout(0) '取得目前keyboard layout
NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法的hkeys
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)"   '假设我们的win95非Ime 者只有English
      Combo1.AddItem RetStr           '若有其他者,要去取得keyboardLayout
   End If                             ' Name再去Registry中找其对应的名称
   If hKB(i - 1) = hCurKBDLayout Then
      Combo1.Text = RetStr
   End If
Next
ActivateKeyboardLayout hCurKBDLayout, 0 '恢复原来输入法
End Sub
End Function

解决方案 »

  1.   

    如何自动更动成中文输入
    如果使用的VB5.0,则查看有没有一个属性是IMEMode,如果有就设定为1 代表开启,那
    便可以每次进入这个Control项时就切换成中文输入。如果没有,那只好自己做。'以下在.Bas
    Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
    Public Declare Function ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
    Public Declare Function ImmSimulateHotKey Lib "imm32.dll" (ByVal hwnd As Long, ByVal dw As Long) As Long
    Const IME_THOTKEY_IME_NONIME_TOGGLE = &H70PuBlic Sub Chg2Chinese(ByVal hwnd As Long) '传入Control项或Form 的hwnd
    Dim hkb As Long
    hkb = GetKeyboardLayout(0) '取得目前Thread的Keyboard Layout
    If ImmIsIME(hkb) = 0 Then  '代表不是中文输入
      ImmSimulateHotKey hwnd, IME_THOTKEY_IME_NONIME_TOGGLE '模拟按Strl-Space
    End If
    End SubPuBlic Sub Chg2English(ByVal hwnd As Long) '传入Control项或Form 的hwnd
    Dim hkb As Long
    hkb = GetKeyboardLayout(0) '取得目前Thread的Keyboard Layout
    If ImmIsIME(hkb) = 1 Then  '代表是中文输入
      ImmSimulateHotKey hwnd, IME_THOTKEY_IME_NONIME_TOGGLE '模拟按Strl-Space
    End If
    End Sub'以下在Form
    Private Sub Form_Load()
    Call Chg2Chinese(Me.hwnd)
    End Sub