当前位置:编程学习 > VB >>

怎样用VB实现反方向切换输入法?

以下是可正方向切换输入法代码(已经验证通过)

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,但代入以上代码中还是只能正方向切换。

求教高手,还需加入什么代码才能实现反方向切换输入法。
--------------------编程问答-------------------- 向你这样操作时不能够实现这个功能的,你要获取所有输入法的列表,然后通过API函数来获取你想要的输入法,将其设置为当前输入法。

Option Explicit

Private 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 = &H1

Dim 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


补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,