Option Explicit
Private 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 ImmIsIME Lib "imm32.dll" (ByVal hkl As Long) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal hkl As Long, ByVal flags As Long) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Const KLF_REORDER = &H8
Dim i&, IMEcounts&, Buff$, RetStr$, hKB&(24) 'IMEstr$()
Private Sub Form_Load()
Buff = String(255, 0)
IMEcounts = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法
For i = 1 To IMEcounts
'ReDim Preserve IMEstr(i)
If ImmIsIME(hKB(i - 1)) = 1 Then '中文输入法
Call ImmGetDescription(hKB(i - 1), Buff, 255)
RetStr = Mid(Buff, 1, InStr(Buff, Chr(0)) - 1)
Else
RetStr = "English (American)" '英文输入法
End If
'IMEstr(i) = RetStr
Combo1.AddItem RetStr
Next i
Call ActivateKeyboardLayout(hKB(0), KLF_REORDER)
End Sub
Private Sub Combo1_Click()
Call ActivateKeyboardLayout(hKB(Combo1.ListIndex), KLF_REORDER)
End Sub
'Private Sub Text1_GotFocus()
' Call ActivateKeyboardLayout(hKB(0), KLF_REORDER)
'End Sub
'Private Sub Text2_GotFocus()
' Call ActivateKeyboardLayout(hKB(3), KLF_REORDER)
'End Sub