不用键盘,点击button或图片实现中英文切换和输入汉字的功能
用sendkeys "{CTRL}" & "{SPACE}"实现中英文切换,有时好用有时不好用,
是否有别的方法实现?还要能够输入中文,谢谢

解决方案 »

  1.   

    Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
    Public Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
    Public Declare Function ImmIsIME Lib "imm32.dll" (ByVal HKL As Long) As Long
    Public Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal HKL As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
    Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
    Public Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
    Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As LongConst 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 StringPrivate Sub Command1_Click()
        If Combo1.ListIndex = -1 Then
            '如果用户尚未选择输入法,显示出错信息。
            MsgBox "请选择一个输入法"
            Exit Sub
        End If
        '改变输入法顺序。
        kln = String(8, 0)
        ActivateKeyboardLayout hKB(Combo1.ListIndex), 0
        'LoadKeyboardLayout可以改变输入法顺序,第一个参数为输入法名称。
        'GetKeyboardLayoutName可以获得输入法名称。
        'ActivateKeyboardLayout设置当前输入法。
        res = GetKeyboardLayoutName(kln)
        curkeylayout = LoadKeyboardLayout(kln, KLF_REORDER)
        ActivateKeyboardLayout curkeylayout, 0
    End SubPrivate Sub Form_Load()
        Buff = String(255, 0)
        '取得目前得输入法。
        curkeylayout = GetKeyboardLayout(0)
        '取得所有输入法。
        NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0))
        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 curkeylayout, 0
    End Sub