ahk 切换/获取当前的输入法-尊龙官方平台

ahk 切换/获取当前的输入法

el/2024/3/25 15:37:38

用ahk代码实现输入法的切换,和获取当前的输入法,这只是一个示例,你可以发挥把它做成更有用的程序,例如对指定的窗口使用指定的输入法,可以为 每个输入法设置一个单独的快捷键等。不过有个 bug,当输入法切换到 微软输入法后,再获取当前输入法状态,会出错。不知道是不是我输入法的问题!

在系统中已安装的输入法信息在注册表 hkey_users/.default/keyboard layout/preload 。里面只有输入法的键盘布局名称,如 e0040840 左e004说明该输入法的标识(智能abc)右0804 说明该输入法为 中文输入法。其输入法的具体名称可到注册表hkey_local_machine/system/currentcontrolset/control /keyboard layouts/ 输入法的键盘布局名称 。layout text键值为该输入法的名称。


注意:可能显示的已安装的输入法比任务栏的输入法列表少,你可以到hkey_local_machine/system /currentcontrolset/control/keyboard layouts/ 找到所有在系统中已注册的输入法。

  • 调用指定输入法:首先需要获得输入法的键盘布局,再调用api函数 loadkeyboardlayout 把指定的输入法激活,该函数返回指定输入法的键盘布局句柄,最后还需要向当前的活动窗口发送切换输入法的消 息,dllcall("sendmessage", uint, 活动窗口的句柄, uint, 80, uint, 1, uint,输入法键盘布局句柄) 。这样就完成了调用指定的输入法。
  • 切换输入法:与调用相类似,调用api函数 activatekeyboardlayout 完成 。当然最后也需要发送切换输入法的消息。函数 activatekeyboardlayout ( hkl hkl,uint flags);其中当参数 hkl 的值为 1 表示切换下一个输入法,0 为上一个输入法。
  • 获取当前的输入法:直接调用api函数 getkeyboardlayout,该函数直接返回当前键盘布局的名称,如需要确切的输入法名字,到注册表中查找即可。

相关api函数说明:
getkeyboardlayout :http://baike.baidu.com/view/1080067.html?wtp=tt
activatekeyboardlayout:http://baike.baidu.com/view/1080058.htm
loadkeyboardlayout :http://baike.baidu.com/view/1080078.htm
除了这些,微软还提供了对输入法更加详细的操作 api,如切换或获取 半/全 角,切换大小写,显示/隐藏 输入法状态栏 等。
有兴趣可以查看 msdn:http://msdn.microsoft.com/en-us/library/aa914560.aspx

 

 

代码如下:

 

gui, add, groupbox, x6 y4 w230 h10 , 已安装的输入法(双击切换)
gui, add, listview, r20 x6 y24 w230 h120 vlistime gsetime ,序号|键盘布局|名称
gui, add, button, x6 y144 w80 h30 gpreime, 上一输入法
gui, add, button, x156 y144 w80 h30 gnextime, 下一输入法
gui, add, button, x86 y144 w70 h30 gstateime, 当前状态
; generated using smartgui creator 4.0
gui, show, x397 y213 h190 w247,输入法切换
gosub,readime
return
guiclose:
exitapp
readime:
lv_modifycol(3,300)
loop,hkey_users,.default/keyboard layout/preload, 1, 1
{
    regread,layout
    regread,imename,hkey_local_machine,system/currentcontrolset/control/keyboard layouts/%layout%,layout text
    regread,layout
     listcontent=%a_loopregname%丨%imename%丨 %layout%
    lv_insert(1,"vis",a_loopregname,layout,imename)
}
return
stateime:
result:=dllcall("getkeyboardlayout","int",0,uint)
setformat, integer, hex
result = 0
setformat, integer, d
msgbox 当前键盘布局为 %result%
return

setime:
if (a_guievent<>"doubleclick")
{
    return
}
gui,submit,nohide
lv_gettext(layout,a_eventinfo,2)
;~ msgbox %layout%

switchime(layout)
return

switchime(dwlayout)
{
    dllcall("sendmessage", uint, winactive("a"), uint, 80, uint, 1, uint, dllcall("loadkeyboardlayout", str, dwlayout, uint, 1))
}

nextime:
dllcall("sendmessage", uint, winactive("a"), uint, 80, uint, 1, uint, dllcall("activatekeyboardlayout", uint, 1, uint, 256))
;-- 对当前窗口激活下一输入法
return
preime:
dllcall("sendmessage", uint, winactive("a"), uint, 80, uint, 1, uint, dllcall("activatekeyboardlayout", uint, 0, uint, 256))
;-- 对当前窗口激活上一输入法
return


http://www.ngui.cc/el/5126763.html

相关文章

让虚拟机可以无线上网而主机不能上网

我的要求比较变态,希望笔记本(主机)不能上网,而虚拟机客户机可以无线上网。这是因为自从用过华硕那 款可以8秒启动系统的上网本之后,就越来越对预装了vista操作系统的hp笔记本的速度,无法容忍!多…

设置 vim 自动缩进

我用vim编辑autohotkey脚本,写脚本也算写程序吧,但是发现不能自动缩进,于是寻找自动缩进的设置方法,找到如下: 在ahk的语法文件vim/vim72/syntax/autohotkey.vim中添加这行代码即可: set autoindent …

使用autohotkey分析日志文件,得到分析报告。

使用 autohotkey 分析日志文件,得到分析报告。 由程序自动生成的日志文件一般有固定的格式,而且文件大小通常比较大。当需要分析这样的日志文件,需要用肉眼在成千上万条记录里面寻找异常,那将是大海捞针,十分费力费时…

vc6、 bcb6 如何设置程序版本号?

今天突然忘记如何设置程序的版本号了,问过同事才记起来,于是把它记录下来,方便以后查阅! 一、 vc 设置版本号的方法: 在 vc 的资源窗口里有个 vs_version_info 的资源,在这个资源里可以修改版本号信…

去掉vim中的换行符^m

在 dos/windows 里, 文本文件的换行符为 /r/n ,而在*nix 系统里则为/n ,所以 dos/windows 里编辑过的文本文件到了 *nix 里,每一行都多了个 ^m 。在window 操作系统下使用gvim打开一些文本文件也经常遇到行末有^m的符号&…

autohotkey辅助生成doxygen风格的注释

遵守doxygen 注释规范,可以使代码注释更加完善的同时,还能自动生成帮助文档。但在初次接触它时,隐约之中对它会有些担心,总担心要去记忆注释的格式,担心要用的时候老忘记格式,从而要经常去翻阅它的帮助文档…

用 autohotkey分析日志文件得到耗时最大的记录

用 autohotkey分析日志文件得到耗时最大的记录 现在有上百个日志文件如 log20100621.txt,每个文件几万条记录,记录示例: [开始发布时间:2010-06-21 09:04:25][发布最终页1个,耗费1: 2秒][刷新列表页1个,耗费2: 3秒][总共耗费:6秒] 现在…

向程序员推荐autohotkey

已经使用autohotkey两三年了,它是 windows操作系统下的脚本工具,程序员使用它,可以大大优化操作、辅助编写代码、帮助分析文件、节省大量时间。而对于程序员而言,写 autohotkey脚本是轻而易举的事情,因此在这里向程序员…

“飞扬小字典” -- 辅助记忆的小工具

关于飞扬小字典 v2.13  飞扬小字典,致力于打造一个辅助记忆的小工具,  要求能够极速地记录和搜索零碎的文本片段,追求速度!    其特点如下:  1、一个快捷键瞬间启动,esc立刻退出(快到不会…

onenote 笔记本世界的航空母舰

你会不会在寻找一种电子工具,它能够像在白纸上一样自由地写字、作画,这样可以用它来记录自己思绪、灵感、心声? 我曾经尝试过很多笔记软件,然而都不是我心目中的那个她。他们都像 word 一样,有宽度限制,而…
网站地图