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

2024-03-25 15:38

本文主要是介绍AHK 切换/获取当前的输入法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用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

这篇关于AHK 切换/获取当前的输入法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845455

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

mysql如何查看当前连接数

《mysql如何查看当前连接数》:本文主要介绍mysql如何查看当前连接数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql查看当前连接数查看mysql数据库允许最大连接数总结mysql查看当前连接数查看当前连接数SHOW STATUS LIKE

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息