中文信息处理技术专栏

中文信息处理技术专栏


首页  中文信息处理技术专栏

  • Windows IMM-IME汉字输入法
  • 时间: 2017-08-01    阅读数: 1435
  • 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的配置信息。

    1 IMM管理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

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


地址:苏州市十梓街1号 苏州大学纵横研究所联系电话:0512-65243192电子邮箱:ckc@suda.edu.cn

Copyright © 苏州大学纵横汉字信息技术研究所 2017