用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 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即可。。

时间: 2024-10-19 21:44:57

用VB读取和控制Windows的中文输入法的相关文章

使用VB.NET编写控制excel的程序

excel|程序|控制   使用VB.NET编写控制excel的程序 以前也总是编写一些excel下的VBA程序,也就几百行代码便可以基本上解决问题.从来没有使用过VC或者VB.Delphi来做此类事情.我想如果做报表的话,相对规模和功能都要多一些,这应该算是excel开发的重点. 这次使用了VB.NET开发一个访问excel读取数据并修改的小程序,有一些经验性的东西和大家共享,如果有误还请大家指正. 大致分为这样几个部分来说明: 1.   准备部分: 准备部分我们需要添加excel libra

在CB程序中控制Windows关机

我们在应用程序编制完成后,需要设计应用程序的包装和分发功能.在编写安装程序时,经常会遇到这样的问题:程序安装完成后需要重新启动计算机.那么在代码中如何控制Windows的关机或重新启动呢? 要实现这个功能,需要用到Windows API提供的一个ExitWindowsEx函数.我们可以通过查看C++ Builder提供的帮助文件得到这个函数的使用格式: BOOL ExitWindowsEx( UINT uFlags, // 设置关机参数 DWORD dwReserved // 系统保留字 );

软件-如何实现VB读取打卡器的内容

问题描述 如何实现VB读取打卡器的内容 现在我手里有一个打卡机,一张卡,在打卡机的说明软件中说这个函数用来获取卡号 int rf_card(int icdevunsigned char _Modeunsigned long *_Snr); 功 能:寻卡,能返回在工作区域内某张卡的序列号 参 数:icdev:通讯设备标识符 _Mode:寻卡模式mode_card _Snr:返回的卡序列号 返 回:成功则返回 0 例:int st; unsigned long snr; st=rf_card(icd

求大神指教 vb.net 怎么控制在网站登陆界面的自动登陆的操作

问题描述 vb.net怎么控制在网站登陆界面的用户名密码读取excel中的数据进行填充,验证码也自动解析.然后进行自动登陆操作!!! 解决方案 解决方案二:验证码基本搞不定.解决方案三:获取网页源码中的登陆按钮,模拟点击,或者用fiddler监控登录时POST的数据,然后模拟发送请求http://hi.baidu.com/gotodoit/item/4d69a50a6260d6e0fe240d77http://www.cnblogs.com/mouse-coder/archive/2013/03

arcgis-Arcgis For Android读取shpfile文件时,中文乱码问题

问题描述 Arcgis For Android读取shpfile文件时,中文乱码问题 加载shpfile文件,读取shpfile文件数据时,中文会出现乱码,如何解决? 解决方案 中文有一些问题的,不要用中文,用英文吧 解决方案二: 试试这个博客里讲的方法:http://blog.163.com/gis_wangwei/blog/static/2390410022015113134247554

如何使用命令行控制Windows演示设置

演示设置的存在就是为了方便商务人士进行一键开启演示情景模式的.你可以把演示模式想象成电脑的一种特殊的情景模式 ,就好比手机上面的不同的情景模式对应着不同场合的铃声等系统方案一样.本文将向各位介绍如何使用命令行控制 Windows 演示设置. 在 Windows 7 上, 微软引入了一个叫 Windows 移动中心的程序,可以集中控制笔记本计算机的各项主要设 置,例如电源方案.屏幕亮度等等. 这里有一项功能其实很实用,但是可能鲜为人知,因为我没有发现身边的朋友中有多少人在使用它.它呢,就叫"演示

着眼注册表 有效控制Windows 7系统

在与Windows 7系统刚刚开始接触的时候,相信大家都会有一种耳目一新的感觉.不过,在全新的操作系统环境下,当我们尝试进行各种控制操作时,会发现并不如以往那样来得顺利了,这是什么原因呢?其实这是因为Windows 7系统对许多功能进行了改善和创新,我们可以采用多种方式对该系统进行控制,从而达到快速操作.提升效率的目的.这不,本文下面就着眼系统注册表,向各位朋友贡献几则有效控制Windows 7系统的技巧,相信这些内容能帮助大家高效操作好Windows 7系统! 1.控制侧边栏小工具显示 Win

Windows CE下中文输入法编辑器

CE包含了一种简体中文输入法编辑器,如果不想编写自己的输入法编辑器,那么可以直接调用默认的.在讲解中文输入法编辑器之前顺便提一下国际化(Internationalization),中文输入法及输入法编辑器只是国际化组件的一小部分.国际化是编写面向不同语言用户的软件过程中一个重要环节,CE的国际化组件包含很多小的组件 . 下表描述了组件的名称.功能: 名称 功能 Agfa字体压缩 支持字体压缩 字体版本 因为东亚字体占据内存较大,此组件提供了用于选择不同大小字体文件的选项 手写识别 手写识别引擎

Delphi全面控制Windows任务栏

使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏.从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮.应用程序切换区(Application Switch Bar).任务栏通知区(Notification Area)以 及任务栏时钟.与其它Windows应用程序相同,任务栏程序(systray.exe)由几个不同的窗体 组成,这些窗体是具有各自的窗口类名.显示方式等信息.因此,只要得到有关窗口信息, 即可通