想用VB编一个程序,在一个文本框中,用户先用搜狗拼音输入法输入文字,然后再用王码五笔继续输入文字,有没有办法识别这期间文本框的输入法状态发生改变?请高手指导

解决方案 »

  1.   

    应该有办法,具体不知道。。 刚百度了下,你参考下:
    http://www.itnose.net/detail/150092.html
    http://blog.csdn.net/liuliu0103/article/details/6294564没空去试,你研究下
      

  2.   

    有个imemode属性吧。
      

  3.   

    imemode属性只能对文本框的中英文状态进行限制,不能识别文本框当前处于什么中文输入法状态
    请版主能不能提供详细代码来研究研究,谢谢!
      

  4.   

    GetKeyboardLayout
    ImmGetDescription
      

  5.   

    中文输入法,是借助西文键盘和特定编码生成汉字编码的方法。中文输入法好像“劫道”的,它拦截键盘传递给系统的消息,将其转换为汉字编码后,将其作为消息传到你的文本框控件。因此,无论是从文本框接收到的消息,还是文本框自身的状态,都无法得知插在中间的是哪一位“好汉”。有关输入法的信息,只能通过操作系统来获得。首先用下面的 API 函数获取一个句柄(dwLayout = 0):
    Public Declare Function GetKeyboardLayout Lib "user32" Alias "GetKeyboardLayout" (ByVal dwLayout As Long) As Long然后,将所得的句柄送入下面函数的 hkl 参数获取输入法名称。lpsz 是字符串缓存,uBufLen 是长度,可设为 255。
    Public Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long但未必所有输入法都能得到一个文字名称。此时,可以借助查表法通过 hkl 句柄得到获知当前输入法。
    E0010804 全拼输入法 5.0 版
    E0040804 智能ABC输入法 5.0 版
    E0050804 区位输入法 5.0 版
    E0100804 王码五笔型输入法 86 版
    E0110804 王码五笔型输入法 98 版
    E0200804 紫光拼音输入法3.0
    08040804 微软拼音2003
    04040404 [台湾]微软注音输入法
    08090809 英语
      

  6.   

    Option Explicit
    Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As LongPrivate Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As LongDim list1 As Variant, list2 As VariantPrivate Sub Command1_Click()
        Dim ret As Long, hkl As Long, i As Long
        Dim strTmp As String    hkl = GetKeyboardLayout(0)
        strTmp = Space(255)
        
        ret = ImmGetDescription(hkl, strTmp, 255)
        
        strTmp = Trim(strTmp)
        If strTmp > "" Then
            Text1 = strTmp
        Else
            For i = 0 To UBound(list1)
                If hkl = list1(i) Then strTmp = list2(i)
            Next i
            
            If strTmp > "" Then
                Text1 = strTmp
            Else
                Text1 = Right("00000000" & Hex(hkl), 8)
            End If
        End If
    End SubPrivate Sub Form_Load()
        list1 = Array(&H8040804, &H4040404, &H8090809, &H4090409)
        list2 = Array("微软拼音输入法2003", "微软注音输入法[台湾]", "英语[英]", "英语[美]")
    End Sub