发表回复 
输入法 相关 学习 汇总 V1.3
2015-08-23, 12 : 24 (这个帖子最后修改于: 2015-09-10 21 : 52 by robertL.)
Smile 输入法 相关 学习 汇总 V1.3
  • 概念
    • IME(Input method editor)—输入方法编辑器(简称,输入法),独立程序。
      • 功能:按键—转换(Conversion)→字符。
        • 直接转换:按键a—映射→字符a(无转换);(英文等符号输入法)
        • 间接转换:按键a—输入法→字符‘啊’。(中文/日文等输入法)
      • IME转换状态(ConversionStatus,简称IME状态):
        • 包含:ModeSentence
          变量的类型: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的句柄标识——约定名称hIMC,描述输入上下文(Input Context)信息。
    • IMM(Input method manager)—系统提供,访问IME的接口。
      • 获取IME句柄的函数:ImmGetContextImmReleaseContext
      • 访问IME状态的函数:ImmGetConversionStatusImmSetConversionStatus
      • 相关参数:IME的句柄、Mode、Sentence。
      • 详见如下的《About Input Method Manager》
    • 键盘布局(旧:Keyboard Layout):即,输入地域标识符(新:input locale identifier);对应输入语言,对应IME
      • 相关函数LoadKeyboardLayoutActivateKeyboardLayout
      • 详见如下的《Keyboard Input》
  • 过程/应用
    • 指定键盘布局→获取IME句柄的函数→访问IME状态的函数。
    • 如:当激活一个可输入的窗口,系统生成WM_IME_SETCONTEXT消息,先发至窗口所在程序(简称程序),若程序不处理此消息,则发至默认IME程序。
    • 如:当向窗口进行输入,系统生成相关消息,先发至窗口所在程序(简称程序),若程序不处理此消息,则发至IME;IME处理完毕后,IME生成WM_IME_CHAR/WM_IME_COMPOSITION消息(转换的结果),先发至程序,若程序不处理此消息,则由系统转换为WM_CHAR消息,发至程序。
    • 消息流程没搞太明白..
  • 其他知识点
    • 不处理IME消息的程序,称为IME-unaware,反之,称为IME-aware
    • IMM可以创建输入上下文,并指派给线程中的窗口默认,线程中的窗口共用一个输入上下文。
    • ImmSimulateHotKeyIMM提供的热键。
      同‘控制面板’-‘区域和语言\键盘和语言\键盘和其他输入语言\更改键盘’-‘文本服务和输入语言\高级键设置\输入语言的热键’。
      含:需预定义的,‘切换至某输入法’;基于特定输入法的输入状态,如,‘输入法/非输入法’、‘全/半角’、‘中/英标点’。(功能有限,视输入法有无提供热键接口。可以直接操作IME状态)
  • 其他帖子
  • 外部参考

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 2用户表示感谢robertL
2015-09-02, 10 : 31 (这个帖子最后修改于: 2017-04-09 15 : 31 by robertL.)
Smile 零散待整理 V0.11
  • 进程.线程.窗口+搜狗 输入法
    [Image: 1glmkp.png]
  • 输入—IMEWM_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自由输入法 - banketree - 博客频道 - CSDN.NETIMM/IME组成、事件过程、IME消息/函数/命令(消息)/结构/常量、IME窗口、输入法接口、输入法实例
  • IME(输入法)窗口与IC(输入上下文)同线程:
    [Image: fu0rxy.png]
    IME窗口基于桌面 包含WS_DISABLED WS_EX_TOPMOST样式(窗口靠前):
    基于桌面:能通过向SHELL注册窗口事件监听。
    包含WS_DISABLED样式:IME窗口不可具有键盘焦点

    [Image: 2vv9d1h.png]
  • 搜狗输入法,在中文模式(状态栏显示为中文模式)下亦可开启英文模式("英文输入法")(此时英文模式覆盖中文模式)。
    bing/必应输入法,在英文模式下才可开启"英文助手"。
  • Windows 95 输入法编辑器(翻译,清晰)
  • Windows IME (一)(转,格式不好,翻译MSDN,重复)
  • 论坛QA如何得知当前是否为文字输入状态?@td3zz 的回答,函数IME_GET获取输入法状态
  • 参见本帖 7# @bootislands1小结笔记

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢robertL
2016-02-14, 00 : 13
RE: 输入法 相关 学习 汇总 V1.3
搜狗输入法状态:
ConvMode Shift 切换中英文输入法
中文 全角:0x10000401=1 0000 0000 0000 0000 0100 0000 0001
英文 半角:0x10000000=1 0000 0000 0000 0000 0000 0000 0000
(以上标点符号都是半角)

萝卜可否说下,这两种,如何获取值?0x10000401,0x10000000
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-02-15, 23 : 02
RE: 输入法 相关 学习 汇总 V1.3
@zhanglei1371 IMC_GETCONVERSIONMODE、ImmGetConversionStatus
实例参见以上链接《#20我的额外|未汇总至此的小结》,其中引用了个封装得很好的库,稍加改造即可。

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-02-16, 06 : 34 (这个帖子最后修改于: 2016-02-16 11 : 34 by zhanglei1371.)
RE: 输入法 相关 学习 汇总 V1.3
终于知道原因了。我使用的输入法不是搜狗,故无法监视出来。搜狗是可以的。
库还是日本友人的库,对于监视通用输入法确实是我目前用过的最好的工具!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢zhanglei1371
2016-04-07, 23 : 05
RE: 输入法 相关 学习 汇总 V1.3
感谢日本友人
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-04-09, 15 : 25 (这个帖子最后修改于: 2017-04-09 15 : 25 by bootislands1.)
RE: 输入法 相关 学习 汇总 V1.3
论坛QA如何得知当前是否为文字输入状态?@td3zz 的代码,实际就摘录自日本网友的输入法库,原地址

粘贴下记的笔记:
引用:判断当前是否是输入状态,我了解到的方法有4种:
1. 用日本网友封装的 IME_GET() 函数。相关贴:http://ahk8.com/archive/index.php/thread-3751-1.htmlhttps://www6.atwiki.jp/eamat/pages/18.html
当然这个库,不止能判断输入状态,还有其它功能
这个函数,对某些窗口,比如软件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

没有万金油方法,具体情况具体结合使用。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢bootislands1
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合