如题。
通过程序A切换程序B的输入法。望高手指教。

解决方案 »

  1.   

    更换输入法
    PrivateDeclare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, _
            lpList As Long) As Long
    Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
    Dim la(1 To 16) As Long
    Dim ActIme As Long
    private sub form_load()
    Dim astr As String * 256
        Dim bstr As String
        Dim X, hMem, i As Long
        X = GetKeyboardLayoutList(32, la(1))
        Combo1.Text = "Ó¢ÓÃÀ¹ú£©"
    If X Then
            For i = 1 To X
                ImmGetDescription la(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    '»ñµÃµ±Ç°ÏµÍ³µÄÊäÈë·¨Private Sub Combo1_Click()
        ActIme = la(Combo1.ListIndex + 1)
         Text3.SetFocus
     End Sub
    Private Sub Text3_GotFocus()
        If Combo1.ListCount > 0 Then
            ActivateKeyboardLayout ActIme, 1
        End If
    End Sub
      

  2.   

    A=用FINDWINDOW取得那个程序的句柄。
    B=GETFOCUS()
    如果A=B那么SENDKEY(CTRL+SHIFT)。或者KEYBD-EVENT我没试。你试吧。
      

  3.   

    上述方法可能行,但当接受焦点的窗体的tabindex为1的控件(引用vb的说法)不为一可接受文本输入的时候,可能不起作用。
      

  4.   

    A=用FINDWINDOW取得那个程序的句柄。
    B=GETFOCUS()
    如果A=B那么
    keybd_event VK_CONTROL, 0, 0, 0
    keybd_event VK_SPACE, 0, 0, 0
    keybd_event VK_SPACE, 0, KEYEVENTF_KEYUP, 0
    keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
    也就是CTRL+空格
      

  5.   

    如果客户切换输入法的方法不是Ctrl+空格 就不好办了呀。