VB和输入法


用VB加API可以轻松的调整输入法的顺序和设置当前输入法,每种输入法都对应有个键盘布局,所以就可以用GetKey- boardLayout函数得到,用ActivateKeyboardLayout就可以设置了。用LoadKeyboardLayout就可以改变输入法的顺序了,将该函数的第二个参数设置为KLF_REORDER,就可以把该输入法设置为第一位。下面贴出调试过的代码

'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
Private hKB(24) As Long, BuffLen As Long
Private Buff As String
Private RetStr As String
Private RetCount As Long
Private kln As String
Private hCurKBDLayout

Private Sub Form_Load()
Buff = String(255, 0)
hCurKBDLayout = GetKeyboardLayout(0) '取得目前的输入法
NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) '取得所有输入法
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)
Combo1.AddItem RetStr
Else
RetStr = "English (American)" '英文输入法
Combo1.AddItem RetStr
End If
Next
ActivateKeyboardLayout hCurKBDLayout, 0 '恢复原来的输入法
End Sub

Private Sub Command1_Click()
If Combo1.ListIndex = -1 Then '如果用户尚未选择输入法,显示出错信息
MsgBox "请先选择一个输入法"
Exit Sub
End If
'改变输入法顺序
kln = String(8, 0)
ActivateKeyboardLayout hKB(Combo1.ListIndex), 0 '设置当前输入法
'下面的代码是调整输入法的顺序。屏蔽掉下面的代码就可以实现输入法的切换
res = GetKeyboardLayoutName(kln) '得到当前输入法的键盘布局
res = LoadKeyboardLayout(kln, KLF_REORDER) '将输入法顺序调整
ActivateKeyboardLayout hCurKBDLayout, 0 '还原输入法
End Sub
'以上代码参考了CSDN上的帖子,自己加了注释以便说明和理解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值