文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
文本框中光标位置的获得
用VB导入导出你的IE收藏夹
VB应用程序访问SQL Server方法探讨
VB访问SQL Server数据库技术全揭密
自动上网抓数据的机器人
自己的IE——用VB制作浏览器
VB中如何保存Webbrowser中的整个页面..
在VB中该如何控制其它程序的弹出窗口..
保存webbrowser中的HTML内容
破译动网验证码的简单方法
轻松获取QQ密码
VB.NET获取硬盘序列号的方法
WEBBROWSER 技巧一(收藏)
VB自动登陆网络站点详解(二):Inet..
获取webbrowser控件网页的源码
WebBrowser控件说明
关于用VB做更漂亮的窗体的思考
VB中访问存储过程的几种办法
VB6中改变屏幕的分辨率和刷新频率
VB编写一个能显示百分比的自定义进度..
公农历转换VB类
VB.NET窗口渐淡关闭
使用VB实现邮箱自动注册(二):修改..
VB.NET轻松实现任务栏程序
VB.NET启动外部程序
利用vb实现图片上传
VB实现局域网内的文件传输
VB 一个Function传回多个值
在VB中实现多线程
VB 手机号码编码程序


技术教程 -> VB教程 ->  
VB编程控制Windows中文输入法
来源:转载   人气:725   录入时间:2007-11-8
      在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 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
   
     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 ′恢复原来的输入法
     End Sub
   
     运行后,在combobox中选择目标输入法,按下command即可。
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987