1.IMMIME

IMMInput Method Manage(输入法管理器)的缩写,IMEInput Method Editor(输入法编辑器)的缩写。微软公司在Windows 95/98/NT4.0/2000/XP/2003/Vista等版本中全部采用了IMM-IME这一架构来实现输入法,该架构具有易扩展、规范、稳定、灵活等优点。

IMM

IMM管理当前操作系统的各个IME,维护IME和应用程序之间的通信。它提供了一些用户接口和API接口,图1Windows XP中通过IMM管理IME的一个用户接口界面,借助于该对话框,用户可以添加、删除IME,也可以设置一个IME的配置信息。

image.png

IME

IME实际上是一种键盘布局,它由用户界面和转换接口两部分组成。它负责将用户输入编码转换为目标字符串后发送到应用程序,并提供用户查看、选择候选字词等界面。

根据与输入法的交互关系来分,Windows中的应用程序可以被分成:不识别 IME 的应用程序、部分识别 IME 应用程序和完全识别 IME 的应用程序。

不识别 IME 的应用程序在运行的时候,不会感知用户当前是否打开或者切换IME。它们就象从键盘输入字符一样接收来自 IME 的最终输入字符。例如Windows附带的记事本程序就是一个典型的不识别IME的应用程序。

部分识别 IME 应用程序往往希望控制 IME 的行为:打开IME、关闭 IME或者配置 IME UI 窗口。这种应用程序也可通过特定的 IMM 消息取得 IME 转换字符串,但是它们本身不显示任何IME用户界面。例如有的应用程序中当获取用户身份证号码的控件获取焦点时,中文输入法会自动关闭,就是一个典型的部分识别IME应用。

完全识别 IME 的应用程序负责通过 IME 绘制 IME UI 窗口(状态、输入码以及候选字词窗口)。这些应用程序可以完全自定义每个窗口的外观,包括在屏幕上的位置以及用于在窗口中显示字符的字体和字体样式。通过这种方法,对文本输入依赖性很高的复杂程序(如文字处理器)就能为用户提供更透明的字符输入法。

2.Windows IME接口

IME输入法的扩展名是ime,例如:Windows附带的全拼输入法的IME文件是winpy.ime,但是其实质上是一个DLL文。它由系统负责运行、调用和加载,IME文件通常存储在Windows的系统文件夹中。IME输入法中大约需要实现15个接口函数供系统调用,下面对它们加以简要说明,详细的参数描述可以参见附录。

1)ImeInquire

此接口函数在用户选择输入法时最先由IMM调用,IMM通过该函数获得该输入法的有关信息,函数应返回IME的初始化信息,设置当前输入法的各项属性,以及当前输入法的用户界面窗口类名称等。

2)ImeConfigure 

此接口函数将在用户通过控制面板或系统图标设置输入法属性时被IMM调用,在此函数中可以显示属性设置对话框,为用户配置输入法提供配置窗口界面。

3)ImeProcessKey

此接口函数由输入法在处理键盘事件时调用,判断输入法是否需要处理一个用户键入的键值。如果不需要则返回FALSE,并将该键值直接发给应用程序,否则返回TRUE,然后IMM将会调用ImeToAsciiEx进行处理。

4)ImeToAsciiEx

该函数的工作是对输入的按键进行处理,只有当ImeProcessKey返回TRUE时才会调用这个接口函数。该函数主要根据输入法当前的运行状态进行处理,可以调用转换引擎,或者进行标点、符号的转换。

5)ImeSelect

当输入法被选择或者选出时,系统将调用本函数。

6)ImeSetActiveContext

当输入法被激活或者搁置的时候,系统将调用本函数。

7)NotifyIME

系统或者应用程序通过本函数根据参数的值改变输入法的当前状态。例如:显示或隐藏候选字词窗口、选定了一个候选字词、修改输入码串的内容。

8)ImeDestroy

当输入法从内存中被卸载时,将调用本函数。

9)ImeConversionList

本函数用于将一个指定的输入码转为为结果串,通常用于被部分识别IME的应用程序和完全识别IME的应用程序调用。在大多数输入法中可以无需实现该函数而直接返回。

10)ImeEscape

应用程序可以通过调用本函数来直接访问一个输入法的特定功能。一般而言这些功能应该是无法通过其他的IMM 函数调用来实现。这么做的主要目的是为了支持特定语种的函数或者IME 的私有函数。

11)ImeSetCompsitionString

本函数可以直接设置输入法的输入码,通常用于被部分识别IME的应用程序和完全识别IME的应用程序调用,在大多数输入法中该函数可以无需实现而直接返回。

12)ImeRegisterWord ­

本函数用于向输入法码本中添加一个字或词组,大多数输入法中该函数可以无需实现而直接返回。

13)ImeUnregisterWord

本函数用于在输入法码本中删除一个字或词组,大多数输入法中该函数可以无需实现而直接返回。

14)ImeGetRegisterWordStyle

本函数用于获取输入法码本中字或词组条目的形式,大多数输入法中该函数可以无需实现而直接返回。

15)ImeEnumRegisterWord

本函数用于在输入法码本中枚举字或词条,大多数输入法中该函数可以无需实现而直接返回。


相关推荐

输入法管理器(Imm)函数大全(wIndows Ce 5.0)

imm好像要被弃用了 还是研究TSF输入法 吧 ,虽然没啥鸟用了 但是还是搬运一下下吧EnumRegisterWordProc此函数是与一起使用的应用程序定义的回调函数ImmEnumRegisterW

微软输入法TsF sampleIme 源码分析(转载)

类:CCandidateWindow,候选字窗口CCompositionPricessorEngine,拼写引擎CSampleIME,主程序CStringRange, 一个特殊的字符串类 见于 Sam

Ime输入法编程心得(转载) 1

原文地址:https://www.cnblogs.com/freedomshe/archive/2012/11/30/ime_learning.html自然语言处理的输入法作业成品没有做出来,但不想再

输入法编程可能用的到的API接口 Ime结构

输入法管理器:GetSystemMetrics(82) // 常量: SM_IMMENABLED 确定是否已启用 IMMIME开发就是实现类似“输入法名字.ime”这样一个动态库(编译的时候通常将.

输入法开发之:疑难杂症

套娃开始:当键盘事件被触发时,获得的参数是ITfContext。但是ITfContext并不能直接修改内容添加文字等,需要调用RequestEditSession,传入一个ITfEditSession

输入法开发基础(一)

输入法作为使用频率最高的软件之一,现有市场已经几乎被搜狗输入法垄断。也正是由于垄断,导致现有的输入法开发项目和开发资料比较少。在这里将自己最近收集的一些内容整理出来,供想做输入法开发的开发人员参考。输

获取输入法坐标

以下是微软TSF输入法取坐标的方法,从里面扒出来的int 取坐标(ITfContext *pContext, TfEditCookie ec, ITfComposition* pRangeCompos

输入法的注册、安装和卸载

注册输入法输入法的安装和普通应用程序有一个大的区别是,除了复制文件到安装目录、做一些必要的设置外,还需要向Windows系统注册这个输入法。我们前期一篇博文 TSF(Text Service Fram

逗比的输入法实现(二):基础概念和常用接口

为什么叫 Meow?因为这是给猫用的输入法。。。目录(一):基本情况(二):基础概念和常用接口(三):整体构架(四):编辑和候选(五):界面管理和无界面模式(六):词库和候选算法(七):皮肤的实现(八

TsF(Text servIces Framework)和输入法

1.TSF输入接口IMM-IME架构成熟,稳定,易于实现,在Windows中被广泛使用,甚至在Linux曾大量使用的中文输入接口SCIM中也可以看到IMM-IME的影子。但是由于IMM-IME在操作权