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

dream梦_9

dream梦_9

2016-02-19 15:46

今天图老师小编给大家展示的是用VB读取和控制Windows的中文输入法,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

  在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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  运行后,在combobox中选择目标输入法,按下command即可。。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
用VB读取和控制Windows的中文输入法

分享:windows8自带中文输入法

电脑入门
分享:windows8自带中文输入法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

iPhone中文输入法哪个最好用

电脑网络
iPhone中文输入法哪个最好用

Windows 8.1简体中文输入法使用前基本

windows系统
Windows 8.1简体中文输入法使用前基本

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

word不能切换搜狗中文输入法导致无法输入中文

软件教程 电脑应用 word
word不能切换搜狗中文输入法导致无法输入中文

Windows 8.1简体中文输入法新增功能

windows系统
Windows 8.1简体中文输入法新增功能

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

VB自定义数据结构的传输转换

VB自定义数据结构的传输转换

如何禁用Mac OS X安全睡眠

如何禁用Mac OS X安全睡眠
下拉加载更多内容 ↓