你的IME到了,请签收!
–关于输入法的更深层次的概念集合汇总
[toc]
歌曲欣赏-<浮岛拼图>-子弥
写在开头的话
今天给大家分享的一首歌是子弥mifafa的 《浮岛拼图》,人儿在外面漂泊,心儿常回到家里,行李常留一勺,故乡的味道;如此安静治愈的声音向大家娓娓道来,一个在外游子的故事。“心里听着会进入意境,安静下来。大猴,清澈的声音能自愈人的心”。我想,与这篇文章一起看,应该是再也适合不过了的。
临近期末以及各种比赛和考试,让花大爷迟迟未更新文章,终于在周五考完了一科科技英语后,抽空将这篇关于输入法的片段集合整理起来,这些都是拼图的碎片,ahk爱好者可以借此,拼出一个天空之城。
所有以后的关于收集一些碎片化的知识,汇总到一篇文章里面,花大爷将此文章归类到《浮岛拼图》。
简介
这次给大家分享收集的是一些关于输入的有关概念以及更深层次对输入法的解释,可视为花大爷之前写的一篇《十二个小时写一个属于你自己的输入法》的进阶版。这篇文章从输入法的概念起步,介绍了IME,IMM等相关概念;然后涉及到了输入法的过程以及应用;最后是对一些其他知识点的概括,外部的材料参考等;对于那些自己写输入法或者希望对输入法有兴趣的同学,希望这篇文章可以帮助到你。(ps:这篇文章干货比较多,记得拿小本本记录一下)(该文章由花大爷转载自Autohotkey中文论坛robertL作者的《输入法 相关 学习 汇总 V1.3》)
蓝色为标题
绿色为重点字词
粉色为作者解释说明
红色为花大爷解释说明
输入法的相关概念介绍
IME
IME(Input method editor)—输入方法编辑器(简称,输入法),独立程序。
功能
按键—转换(Conversion)→字符。
- 直接转换:按键a—映射→字符a(无转换);(英文等符号输入法)
- 间接转换:按键a—输入法→字符‘啊’。(中文/日文等输入法)
IME转换状态(ConversionStatus,简称IME状态)
(一)包含:Mode、Sentence。
- 变量的类型:int;
- 值:由状态位构成。
(二)Mode、Sentence在MSDN中定义,但各IME有自己的非标准的实现。
即,不同的IME,在相同的IME状态可能有不同的Mode、Sentence值。
故,无需考察Mode、Sentence在MSDN中的定义,自己测试所用输入法在特定状态下的值。
(三)Mode:关于独立字符的模式。
- 如:中/英符号、全/半角、中/英文符号等。
(四)Sentence:关于组合字词的模式。
- 中文未使用(,日文使用)。
(五)假如是中文有情况下:双打/标准模式。
- 双打模式,Mode是负数;
- 标准模式,Mode是正数。
(Mode变量的类型:int)双打/标准模式在MSDN中定义?,但IME有各自的实现。
如:智能ABC输入法,存在独立的双打模式、标准模式;搜狗输入法,基于标准模式,实现双打模式功能;微软拼音输入法,基于双打模式,实现标准模式功能。
故,无需考察双打/标准模式,自己测试所用输入法在特定状态下的值。
(六)系统以线程为单位为各线程提供IME支持。默认,一个线程对应一个IME实例,线程中的窗口共享此IME实例。
- 例,线程中的窗口共享此IME实例。
IME实例由IME的句柄标识——约定名称hIMC,描述输入上下文(Input Context)信息。
IMM
IMM(Input method manager)—系统提供,访问IME的接口。
- 获取IME句柄的函数:ImmGetContext、ImmReleaseContext
- 访问IME状态的函数:ImmGetConversionStatus、ImmSetConversionStatus。
- 相关参数:IME的句柄、Mode、Sentence。详见如下的《About Input Method Manager》
键盘布局
键盘布局(旧:Keyboard Layout):即,输入地域标识符(新:input locale identifier);对应输入语言,对应IME。
相关函数LoadKeyboardLayout、ActivateKeyboardLayout 。详见如下的《Keyboard Input》
过程/应用
- 指定键盘布局→获取IME句柄的函数→访问IME状态的函数。
- 如:当激活一个可输入的窗口,系统生成WM_IME_SETCONTEXT消息,先发至窗口所在程序(简称程序),若程序不处理此消息,则发至默认IME程序。
- 如:当向窗口进行输入,系统生成相关消息,先发至窗口所在程序(简称程序),若程序不处理此消息,则发至IME;IME处理完毕后,IME生成WM_IME_CHAR/WM_IME_COMPOSITION消息(转换的结果),先发至程序,若程序不处理此消息,则由系统转换为WM_CHAR消息,发至程序。
- 消息流程没搞太明白..(该作者没搞明白)
外部引用
其他知识点
1.不处理IME消息的程序,称为IME-unaware,反之,称为IME-aware
2.IMM可以创建输入上下文,并指派给线程中的窗口。默认,线程中的窗口共用一个输入上下文。
3.ImmSimulateHotKey:IMM提供的热键。
同‘控制面板’-‘区域和语言\键盘和语言\键盘和其他输入语言\更改键盘’-‘文本服务和输入语言\高级键设置\输入语言的热键’。
含:需预定义的,‘切换至某输入法’;基于特定输入法的输入状态,如,‘输入法/非输入法’、‘全/半角’、‘中/英标点’。(功能有限,视输入法有无提供热键接口。可以直接操作IME状态)
其他帖子
(这些帖子由于链接失效,故挂出来只能由各位ahk爱好者各自百度了解)
- 输入法 演示
- 输入法切换方法不完全小结@amnesiac(#20我的额外|未汇总至此的小结)
- 输入法切换,获取脚本 @BLooM2(41#我的不完全小结)
- 根据不同窗口自动设置输入法@maxspeedwind (15#我的小结)
- 怎样能监视这个窗口的出现? @lenina (包含设置输入法状态的实例,ImmGetDefaultIMEWnd、WM_IME_CONTROL、IMC_SETOPENSTATUS(不在wParam for WM_IME_CONTROL定义中),未汇总至此..)
外部参考
- MS:About Input Method Manager(英文)
- MS:Keyboard Input(英文)(有很多按键、热键的内容)
- (转)VC IMM/IME输入法编程(好像基本是翻译版的《About Input Method Manager》)(原文在百度空间,已不可访问,但网上有大量转载)
- 在应用程序中精确切换输入法 (防止文章失效找不到花大爷将其资料转到本站:IMM/IME输入法编程)
- 再来谈谈切换输入法以及IMM/IME
进程.线程.窗口+搜狗 输入法
(一)进程线程
输入—IME→WM_IME_KEYDOWN—程序.DefWindowProc→WM_KEYDOWN
WM_IME_CONTROL:程序→IME、WM_IME_NOTIFY:IME→目标程序、WM_IME_REQUEST:IME→目标程序→IME。
(二)搜狗输入法状态
- ConvMode Shift 切换中英文输入法
中文 全角:0x10000401=1 0000 0000 0000 0000 0100 0000 0001
英文 半角:0x10000000=1 0000 0000 0000 0000 0000 0000 0000
(以上标点符号都是半角) - SentenceMode Ctrl+Space 关闭输入法(搜狗设置\”搜狗拼音快捷键”、”文本服务和输入语言\高级键设置\输入语言的热键\输入法/非输入法切换”)
输入法关:8
输入法开:0 - 输入法开、英文状态亦可能经由输入法的英文助手进行输入。
(三)开源项目之freepy自由输入法
- 开源项目之freepy自由输入法 – banketree – 博客频道 – CSDN.NETIMM/IME组成、事件过程、IME消息/函数/命令(消息)/结构/常量、IME窗口、输入法接口、输入法实例(貌似该链接已失效)
(四)IME(输入法)窗口与IC(输入上下文)同线程
IME窗口基于桌面 包含WS_DISABLED WS_EX_TOPMOST样式(窗口靠前):
基于桌面:能通过向SHELL注册窗口事件监听。
包含WS_DISABLED样式:IME窗口不可具有键盘焦点
(五)Windows 95 输入法编辑器(翻译,清晰)
(六)此处为日本网友封装的 IME_GET() 函数
已存到本站内部链接:(安全)
外部链接:(与上面的一样)
http://ahk8.com/archive/index.php/thread-3751-1.html
https://www6.atwiki.jp/eamat/pages/18.html
1.当然这个库,不止能判断输入状态,还有其它功能
这个函数,对某些窗口,比如软件MyLifeOrganized无效
2. 用A_CaretX,对于Firefox浏览器等非标准窗口,无效
3. 用ControlGetFocus 获取焦点控件,通过文件名是否含edit等字样,判断是否为编辑控件
相关贴:http://ahk8.com/archive/index.php/thread-4338.html(失效)
4. Sendmessage发送消息给窗口,通过返回值判断
相关贴:http://tieba.baidu.com/p/2543294240
没有万金油方法,具体情况具体结合使用。
鸣谢
本文章由“没钱上网的花大爷”收集于Autohotkey中文论坛robertL作者的《输入法 相关 学习 汇总 V1.3》并对其解释标注;
更多精彩脚本与文章,请关注ahk官方中文网:www.autoahk.com
或者请加入我们:QQ群:
1:3222783 (autohotkey高级群)
2:470710096(autohotkey终极群)
3:348016704(autohotkey高手群/RPA)此群付费但是内有众多高手,推荐加
😀 😀 我的妈呀,感动到我了,加油,一定好好学习!