1.IMM与IME
IMM是Input Method Manage(输入法管理器)的缩写,IME是Input Method Editor(输入法编辑器)的缩写。微软公司在Windows 95/98/NT4.0/2000/XP/2003/Vista等版本中全部采用了IMM-IME这一架构来实现输入法,该架构具有易扩展、规范、稳定、灵活等优点。
IMM
IMM管理当前操作系统的各个IME,维护IME和应用程序之间的通信。它提供了一些用户接口和API接口,图1是Windows XP中通过IMM管理IME的一个用户接口界面,借助于该对话框,用户可以添加、删除IME,也可以设置一个IME的配置信息。
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在操作权