能够接受输入的控件有一个imemode属性,你可以在程序里控制他
 
IMEMode 属性
      该属性返回或者设置的数值用来确定被选定的对象的 IME (Input Method Editor,输入方法编辑器)状态。注意   只有 Visual Basic 的远东地区版本中才会出现该属性。object.IMEMode [= value]IMEMode 属性的语法包括以下几个部分:部分 描述 
object 一个对象表达式,其值为“应用于”列表中的一个对象。 
value 一个整数,它指定了将要被对象使用的 IME 模式。 
设置值value 的设置值包括:设置 描述 
0 无(缺省设置)。该值表明“无 IME 控制”。当 IMEMode 属性被设置为 0 时,可以使用 IMEStatus 函数确定当前的 IME 状态。 
1 IME 打开。该数值表明 IME 已经被打开,可以输入汉字或日文字符。该设置仅对日文、简体汉字和繁体汉字 IME 有效。 
2 IME 关闭。该模式表明 IME 被关闭,因此对象将处于英文输入模式。该设置仅对日文、简体汉字和繁体汉字 IME 有效。 
3 IME 被禁止。该模式类似于 IMEMode = 2,区别仅在于数值 2 没有禁止 IME。在本设置下,用户不能够通过键盘将 IME 打开,而且 IME 浮动窗口被隐藏。该设置仅对日文 IME 有效。 
4 日文平假名双字节字符(DBC)。该设置仅对日文 IME 有效。 
5 日文片假名 DBC. 这些设置仅对日文 IME 有效。 
6 日文片假名单字节字符 (SBC)。这些设置仅对日文 IME 有效。 
7 字母数字 DBC。该些设置仅对日文 IME 有效。 
8 字母数字 SBC。该些设置仅对日文 IME 有效。 
9 Hangeul DBC。该些设置仅对朝鲜语 IME 有效。 
10 Hangeul SBC。该些设置仅对朝鲜语 IME 有效。 
说明在设计时,可以使用对象的“属性”窗口来设置对象的 IMEMode 属性。在运行时,可以通过代码返回或者设置 IMEMode 属性。如果对象拥有焦点的时候改变了 IMEMode 属性的设置,对象的 IME 状态将发生相应的改变。如果将 IMEMode 属性设置为 0 (无),那么无论对象的当前状态如何设置,结果总是返回 0。如果将 IMEMode 属性设置为 0 以外的任何有效值, IMEMode 属性将返回当前的 IME 状态。对于日文 IME,只能使用设置值 0 到 8。设置 9 和 10 对于日文系统是无效的。对于朝鲜语 IME,只能使用设置 0 以及 7 到 10。设置 1 到 6 对于朝鲜语系统是无效的。对于简体汉字和繁体汉字 IME,只能使用设置 0 到 2。设置 3 到 10 对于汉字系统是无效的。

解决方案 »

  1.   

    用api函数
    Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
    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 GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) 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 ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
    Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
    Public Const KLF_REORDER = &H8
    Public j As Integer
    Public ss() As String
    Public Declare Function GetMessageExtraInfo Lib "user32" () As Long
    Public Function SystemImes() As Variant
    '功能:将系统中文输入法名称返回到一个字符串数组中
    '返回:如果不存在中文输入法,则返回空串
        Dim arrIme(99) As Long, arrName() As String
        Dim lngLen As Long, strName As String * 255
        Dim lngCount As Long, i As Integer, j As Integer
        
        lngCount = GetKeyboardLayoutList(UBound(arrIme) + 1, arrIme(0))
        For i = 0 To lngCount - 1
            If ImmIsIME(arrIme(i)) = 1 Then
                ReDim Preserve arrName(j)
                lngLen = ImmGetDescription(arrIme(i), strName, Len(strName))
                arrName(j) = Mid(strName, 1, InStr(1, strName, Chr(0)) - 1)
                j = j + 1
            End If
        Next
        SystemImes = IIf(j > 0, arrName, vbNullString)
    End FunctionPublic Function OpenIme(Optional strIme As String) As Boolean
    '功能:按名称打开中文输入法,不指定名称时关闭中文输入法
        Dim arrIme(99) As Long, lngCount As Long, strName As String * 255
        
        lngCount = GetKeyboardLayoutList(UBound(arrIme) + 1, arrIme(0))
        Do
            lngCount = lngCount - 1
            If ImmIsIME(arrIme(lngCount)) = 1 Then
                ImmGetDescription arrIme(lngCount), strName, Len(strName)
                If InStr(1, Mid(strName, 1, InStr(1, strName, Chr(0)) - 1), strIme) > 0 And strIme <> "" Then
                    If ActivateKeyboardLayout(arrIme(lngCount), 0) <> 0 Then OpenIme = True
                    Exit Function
                End If
            ElseIf strIme = "" Then
                If ActivateKeyboardLayout(arrIme(lngCount), 0) <> 0 Then OpenIme = True
                Exit Function
            End If
        Loop Until lngCount = 0
    End Function
    就可以了
    快给我加分!!!