利用 AttachThreadInput 改变其它进程的输入法状态
利用 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 消息 改变 其它 进程 的 输入 状态 ? 众所周知,通过 ActivateKeyboardLayout 函数可以 改变 当前线程的 输入 法 状态 ,不过最近发现通过 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 连用可以
利用 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 消息改变其它进程的输入状态
?
众所周知,通过 ActivateKeyboardLayout 函数可以改变当前线程的输入法状态,不过最近发现通过 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 连用可以改变任意进程内线程的输入法状态,代码如下:
?
以下代码通过 GetKeyboardLayoutList 取得首选的中文输入法的 HKL(Keybroad Layout Handle):
?
HKL g_hklRPC = NULL; BOOL InitHklRPC()
{
// Find RPC hkl
UINT nMaxHklCnt = GetKeyboardLayoutList(, NULL); HKL* p_hklList = (HKL*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nMaxHklCnt * sizeof(HKL)); UINT nHklCnt = GetKeyboardLayoutList(nMaxHklCnt, p_hklList); for(UINT i=;i<nHklCnt;i++) {
if(LOWORD(p_hklList[i]) == 0x0804) {
g_hklRPC = p_hklList[i];
break;
}
} HeapFree(GetProcessHeap(), NULL, p_hklList); return (g_hklRPC == NULL)? FALSE : TRUE;
}
?
有关 HKL 参见 MSDN“Languages, Locales, and Keyboard Layouts”,HKL 其实是一个混合值,Loword 是一个 Language IDentifier,Hiword 是一个 Device Handle。以上代码只是简单的通过检查HKL的低字是否为中文 RPC(0x804),并取回第一个中文 RPC 的 HKL。
?
有了 HKL,有趣的节目开始了~~~? 注意,以下代码把当前 focus 所在窗口的输入法状态设为中文:
?
HWND hWnd = GetForegroundWindow();
ASSERT(IsWindow(hWnd)) // Get Target Thread ID and Attach Thread Input
DWORD ProcID;
DWORD ThreadID = GetWindowThreadProcessId(hWnd, &ProcID);
AttachThreadInput(GetCurrentThreadId(), ThreadID, TRUE); // Get Target Window
HWND hWndFocus = GetFocus(); // Post Input Messages
ASSERT(IsWindow(hWndFocus)); // Change Input Language
PostMessage(hWndFocus, WM_INPUTLANGCHANGEREQUEST, (WPARAM)TRUE, (LPARAM)g_hklRPC); // Use Language ID 0x0804(Chinese PRC) // Detach Thread Input
AttachThreadInput(GetCurrentThreadId(), ThreadID, FALSE);
?
以上代码十分清晰,我就不解说了。
利用 AttachThreadInput 改变其它进程的输入法状态的更多相关文章
- devexpress中gridview控件编辑时改变输入法状态
在win7环境下使用Devexpress中的SpinEdit控件,切换成中文[简/繁]输入法输入数字键时有不少输入法会重复产生数字如输入1会变成11,输入123会变成112233.使用SpinEdit ...
- 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)
原文:http://bbs.kafan.cn/thread-1637531-1-1.html 使用目的:1 网页和本地客户端登录一站式解决2 通过KeePss修改密码和登录更方便,可以复制粘贴,省了输 ...
- 怎么用js代码改变单选框的选中状态
今天突然有一个需求要用到,使用js代码改变单选框的选中状态.当时想也不想直接 function doGender(gender) { if (gender == "男") { ge ...
- 利用代码改变世界 #AzureDev
毫无疑问,开发人员是 //build/ 2013 的主角.开发人员是我们这个行业的心脏和灵魂,我们很感谢他们所做的一切.在 Satya Nadella 走上讲台发表第 2 天的主题演讲之前,我们播放了 ...
- 利用LoadRunner判断HTTP服务器的返回状态
利用LoadRunner判断HTTP服务器的返回状态第一种方法:是利用LR的内置函数web_get_int_property.举例:#include "web_api.h"Acti ...
- Linux进程管理之状态(二)
二.进程的生命周期 进程是一个动态的实体,所以他是有生命的.从创建到消亡,是一个进程的整个生命周期.在这个周期中,进程可能会经历各种不同的状态.一般来说,所有进程都要经历以下的3个状态: 就绪态.指进 ...
- [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”[转]
测试中发现使用小鹤双拼,如果不是使用shift切换中英文,效果不理想,留下此文章做个标记 https://www.autoahk.com/archives/8755 输入法状态提示,中文状态提示&qu ...
- 【CPU】进程管理之五状态模型
本文为第三篇,进程管理之五状态模型,进程在操作系统里边是有多个状态的,本文就是了解进程在操作系统中的多个状态 1.进程的五个状态 创建状态 就绪状态 阻塞状态 执行状态 终止状态 2.进程处于这五种状 ...
- 使用 AHK 在 VS Code 中根据上下文自动切换输入法状态
平常在VS Code打公式,中英文切换一直狂点 Shift 手都快按断了,于是试图用 AutoHotKey 搞一些自动切换输入法程序,让它根据当前输入环境自动切输入法. 之前在网上搜到的是切换键盘的( ...
随机推荐
- python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)
服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...
- 2018-2019-2 20165209 《网络对抗技术》Exp2:后门原理与实践
2018-2019-2 20165209 <网络对抗技术>Exp2:后门原理与实践 1 后门原理与实验内容 1.1 后门原理 -后门就是不经过正常认证流程而访问系统的通道. 哪里有后门呢? ...
- Linux基础命令---chmod
chmod 改变文件或者目录的权限,可以用数字或者字母来标识权限.在数字模式下:0,代表没有权限:1,代表可执行:2,代表可读:4,代表可写:多个权限可以相加.在字符模式下:x,代表执行:r,代表读: ...
- read progress
<GNU+make中文手册-v3.80> 14 跟我一起写 Makefile 8 51单片机及c语言程序开发实例7/20/465
- go-restful 实现一个web server
go web server 1. 在ubuntu上安装go. 在ubuntu14.04上目前,最高的版本是golang-1.6 $ sudo apt-get install golang-1.6 $ ...
- 20145104张家明 《Java程序设计》第四次实验设计
20145104张家明 <Java程序设计>第四次实验设计 这第四次实验报告 我们开始着手安卓了 在电脑上安装了安卓虚拟机
- UVa 714 Copying Books - 二分答案
求使最大值最小,可以想到二分答案. 然后再根据题目意思乱搞一下,按要求输出斜杠(这道题觉得就这一个地方难). Code /** * UVa * Problem#12627 * Accepted * T ...
- git下载速度太慢【学习笔记】
使用了sshFQ的伙伴添加这个配置下载速度有极大的提升. git config --global http.proxy 'socks5://127.0.0.1:1080'
- bootstrap5
列表组的使用 ul.list-group > li.list-group-item *5... 列表组中可以放置徽标: 在li中放置 span.badge. bootstrap中的情景类: 实际 ...
- HDU 1285 确定比赛名次(拓扑排序)题解
Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...