以下是可正方向切换输入法代码(已经验证通过)Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Sub Command1_Click()    keybd_event 17, 0, 0, 0    keybd_event 16, 0, 0, 0    keybd_event 17, 0, 2, 0    keybd_event 16, 0, 2, 0   End Sub按照键盘功能,只要敲击键盘右侧的Ctrl+Shift键就可以反方向切换输入法,我也找到右Ctrl+Shift键的代码是163、161,但代入以上代码中还是只能正方向切换。求教高手,还需加入什么代码才能实现反方向切换输入法。

解决方案 »

  1.   

    向你这样操作时不能够实现这个功能的,你要获取所有输入法的列表,然后通过API函数来获取你想要的输入法,将其设置为当前输入法。Option ExplicitPrivate Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal Flags As Long) As Long
    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 Const IME_CONFIG_GENERAL = 1
    Private Const KLF_REORDER = &H8
    Private Const KLF_ACTIVATE = &H1Dim Layout(1 To 16)         As Long
    Dim ActIme     As Long'     选择输入法
    Private Sub Combo1_Click()
            ActIme = Layout(Combo1.ListIndex + 1)
            Text1.SetFocus
    End Sub'     初始装入输入法信息
    Private Sub Form_Load()
            Dim AStr     As String * 256
            Dim BStr     As String
            Dim x     As Long
            Dim hMem     As Long
            Dim i     As Long
            
            x = GetKeyboardLayoutList(32, Layout(1))
            Combo1.Clear
            If x Then
                    For i = 1 To x
                            ImmGetDescription Layout(i), AStr, 256
                            If InStr(AStr, Chr(0)) = 1 Then
                                    BStr = ""
                            Else
                                    BStr = Left$(AStr, InStr(AStr, Chr(0)))
                            End If
                    
                            If Trim(BStr) = "" Then
                                    Combo1.AddItem "英语(美国) "
                            Else
                                    Combo1.AddItem BStr
                            End If
                    Next i
            End If
    End Sub'     为文本框指定选中的输入法
    Private Sub Text1_GotFocus()
            If Combo1.ListCount > 0 Then
                    ActivateKeyboardLayout ActIme, 1
            End If
    End Sub