VB读取和控制Windows的中文输入法

 

 

在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  
          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   Command1_Click()  
          If   Combo1.ListIndex   =   -1   Then   '如果用户尚未选择输入法,显示出错信息  
          MsgBox   "请先选择一个输入法"  
          Exit   Sub  
          End   If  
          If   Combo1.Text   =   "恢复原来的输入法"   Then  
                  ActivateKeyboardLayout   hCurKBDLayout,   0  
                  Exit   Sub  
          End   If  
          '改变输入法顺序  
          kln   =   String(8,   0)  
          ActivateKeyboardLayout   hKB(Combo1.ListIndex),   0  
          res   =   GetKeyboardLayoutName(kln)  
          res   =   LoadKeyboardLayout(kln,   KLF_REORDER)  
          ActivateKeyboardLayout   res,   0  
          End   Sub  
          Private   Sub   Form_Load()  
          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)  
          Combo1.AddItem   RetStr  
          Else  
          RetStr   =   "English   (American)"   '英文输入法  
          Combo1.AddItem   RetStr  
          End   If  
          Next  
          ActivateKeyboardLayout   hCurKBDLayout,   0   '恢复原来的输入法  
          Combo1.AddItem   "恢复原来的输入法"  
          End   Sub   
   
'VC语言对应要加入#include <imm.h>头文件 同时还要设置链接 imm32.lib

'#pragma comment ( lib, "imm32.lib" )
'#include <imm.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值