在 Windows 中我们可以用“Ctrl+Shift”键来调入或切换中文输入法,但是这样做每次都是使位于输入法
列表顶端的那个输入法首先被调用。通常我们都要连续按好几次“Ctrl+Shift”才能将习惯的输入法调出。
我编制了一段小程序,通过它可以把任意一个输入法放在输入法列表的顶端。
它的原理是:使用 LoadKeyboardLayout 函数可以改变输入法的顺序,只要在第一个参数中传递目标输
入法的 KeyboardlayoutName,第二个参数用 KLF_REORDER 就可以了。
例如,aa = LoadKeyboardLayout(″00000409″, KLF_REORDER) 使英文变成第一。那怎样获得
KeyboardlayoutName 呢?因为使用 GetKeyboardLayoutname 可以返回当前输入法的 KeyboardlayoutName,
所以我们可以先用 GetKeyboardLayoutList 函数来取得所有输入法,再用 activateKeyboardlayout()函数
设置当前输入法,最后就可以得到它的 KeyboardlayoutName 了。具体步骤如下:
打开 VB 后选择标准的 EXE 文档,在 Form1 上添加一个 Combobox 和一个 command 控件,输入以下程序。
′以下的 API 函数用于输入法操作
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
Private Declare Function GetKeyboardLayoutName Lib ″user32″ Alias _
″GetKeyboardLayoutNameA″ (ByVal pwszKLID As String) 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 NoOfKBDLayout As Long, i As Long, j As Long