希望对你有用 Option ExplicitPrivate 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 Declare Function ActivateKeyboardLayout Lib "user32" _ (ByVal hkl As Long, ByVal flags As Long) As Long
Const IME_CONFIG_GENERAL = 1 Const KLF_REORDER = &H8 Const KLF_ACTIVATE = &H1Dim 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
我的API书上没有找到
Option ExplicitPrivate 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 Declare Function ActivateKeyboardLayout Lib "user32" _
(ByVal hkl As Long, ByVal flags As Long) As Long
Const IME_CONFIG_GENERAL = 1
Const KLF_REORDER = &H8
Const KLF_ACTIVATE = &H1Dim 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
你的方法我试了,只能指定自己的输入法,而不能指定其它程序的
是不是要用Sendmessage来发消息啊