阿杰 发表于 2010-8-8 15:00:44

change Ctrl-Shift 出现输入法的顺序

change Ctrl-Shift 出现输入法的顺序
    loadKeyboardLayout()可以改变order,只要第一个叁数传
    您要使之变成Top的KeyboardlayoutName,第二个叁数传KLF_REORDER
    便可,例如底下的例子便是

    aa = LoadKeyboardLayout("e0060404", KLF_REORDER) '使大易 变top
    aa = LoadKeyboardLayout("00000409", KLF_REORDER) '使英文变top
    aa = LoadKeyboardLayout("e0010404", KLF_REORDER) '使注音变top
    如此,使顺序变成

             注音
             英文
             大易


       而如何得知每个输入法的keyboardlayName呢? 则使用
       GetKeyboardLayoutname()它会传回Current KeyBoardLayoutName
       配合GetKeyboardLayoutList 取得所有install的KeyBoard Handle
       再用activateKeyboardlayout()来设定目前的keyboardLayout如下:


Private Declare Function GetKeyboardLayoutList Lib "user32" Alias _
   "GetKeyboardLayoutList" (ByVal nBuff As Long, lpList As Long) As Long
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias _
   "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function ActivateKeyboardLayout Lib "user32" Alias _
   "ActivateKeyboardLayout" (ByVal HKL As Long, ByVal flags As Long) As Long
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" _
   (ByVal pwszKLID As String, ByVal flags As Long) As Long
Const KLF_REORDER = &H8

Private Form_Load()
Dim hkb5(24) as Long, i as Long
Dim kln As String
Dim BuffLen As Long
Dim Buff As String
Dim RetStr As String
Dim RetCount As Long

Buff = String(255, 0)
BuffLen = 255

kln = String(8, 0)
LayOutNO = GetKeyboardLayoutList(25, hkb5(0))
For i = 0 To LayOutNO - 1
   ActivateKeyboardLayout hkb5(i), 0
   res = GetKeyboardLayoutName(kln)
   RetCount = ImmGetDescription(hKB5(i - 1), Buff, BuffLen)
   RetStr = Left(Buff, RetCount)
   Debug.Print RetStr, kln   '列印各种输入法,及其输入法名称代号
Next i
End Sub
页: [1]
查看完整版本: change Ctrl-Shift 出现输入法的顺序