兄弟姐妹
怎样实现程序在windows下切换输入法?

解决方案 »

  1.   

    在窗体上放一个:List1.
    在FORM_LOAD 事件中
    CALL LoadInput(me)
    '------------------------------
    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 GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
    Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
    Public Declare Function GetKeyboardLayoutList Lib "user32" (ByVal nBuff As Long, lpList As Long) As Long
    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 LongPublic Const KLF = &H8
    Public Res As Integer
    Public NoOfKBDLayout As Long, i As Long, j As Long
    Public hKB(24) As Long, BuffLen As Long
    Public Buff As String
    Public RetStr As String
    Public RetCount As Long
    Public Kln As String
    Public hcurKBDLayOut As StringPublic Sub SelectClick(MyForm As Form)
      On Error Resume Next
      If MyForm.List1.ListIndex = -1 Then Exit Sub
      Kln = String(8, 0)
      ActivateKeyboardLayout hKB(MyForm.List1.ListIndex), 0
      Res = GetKeyboardLayoutName(Kln)
      Res = LoadKeyboardLayout(KLF, Kln)
    End Sub
    '---------------------------------------------------------
    Public Sub LoadInput(MyForm As Form)
      Buff = String(255, 0)
      hcurKBDLayOut = GetKeyboardLayout(0)
      NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0))
      ReDim layoutlist(NoOfKBDLayout) As String
      For i = 1 To NoOfKBDLayout
          If ImmIsIME(hKB(i - 1)) = 1 Then
             BuffLen = 255
             RetCount = ImmGetDescription(hKB(i - 1), Buff, BuffLen)
             RetStr = Left(Buff, RetCount)
             MyForm.List1.AddItem RetStr
          Else
             RetStr = "English (American)"
             MyForm.List1.AddItem RetStr
          End If
      Next
         ActivateKeyboardLayout hcurKBDLayOut, 0
    End Sub