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实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数