收藏 分享(赏)

输入发设计.doc

上传人:myw993772 文档编号:7516540 上传时间:2019-05-20 格式:DOC 页数:5 大小:26KB
下载 相关 举报
输入发设计.doc_第1页
第1页 / 共5页
输入发设计.doc_第2页
第2页 / 共5页
输入发设计.doc_第3页
第3页 / 共5页
输入发设计.doc_第4页
第4页 / 共5页
输入发设计.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、Win32 输入法编程技术的分析研究作者:新疆大学 巴力登 陆莲芳【摘要】本文论述了 Win32 输入法编程技术的基本原理、技术要点及其实现的方法. 并分析研究了基于 IMM-IME 结构的输入法的构成、接口、设计方法与核心技术问题。 【关键词】输入法编辑器;输入法管理器;输入法用户接口;键盘消息1、概述对于任何一种文字信息处理系统来讲,包括中、日、韩,蒙文,藏文,阿拉伯文(维哈柯文)等,首先解决的技术问题是文字的输入。比如移动电话、网络电话等也不例外,同样在办公自动化软件、字处理软件、行业专用软件、嵌入式软件、视频软件等等,所有的软件都需要有输入法支持。根据输入设备的不同可以将常用中文输入法

2、分为 3 类:键盘输入法、笔输入法和语音输入法。从实现输入这个技术问题而言,目前的输入技术实现可划分为:(1)外挂的具有输入法功能的应用软件;(2)具有输入法功能的文字编辑软件;(3)“IMM-IME”的结构实现输入法编程技术;(4)嵌入式数字化输入技术等等。微软是相当重视输入法软件市场的,所提供的开发输入法开发平台工具种类比较多,如vc+6.0,vc+.net ,SDK Win32 API 等。其中输入法的实现最规范,最有效的方式之一是:使用 Windows IME API(应用程序接口)即利用 Windows 所提供的输入法管理器和输入法编辑器的结构“IMM-IME”的结构实现输入法编程。

3、字体技术和文本技术是文本显示的两个关键技术。输入技术是研究中文信息处理的一个重要课题,包括我国少数民族语言文字信息处理在内,应用在Win98/XP 或(linux/unix)环境中,输入、显示、输出或打印。输入法实现的总体思路是:通过不同的方式获取用户输入的信息,再经过转换引擎将输入的信息转换成为其对应的字符;如果出现多种转换结果,则出现选择窗口,最后由用户选择所需要的文字。对于中文 Windows 操作系统而言,则将结果汉字字符串转换成相应的汉字字符信息,发送到应用程序窗口,完成汉字的输入过程。2、WINDOWS 输入法的基本原理Windows IME 是 Windows 支持的多语言核心组

4、件之一,为输入法的开发提供了强有力的支持, Windows XP 与基于每个目标国家最常用的输入法的标准 IME 一起发布,而且大量第三方开发上出售 IME 软件包。Windows2000 和 Windows XP 中的 IME 模块适合于一种规模更大的机制,这种机制可以把用户输入传递给应用程序。Windows 系统下汉字输入法实际上是将输入的标准 ASCII 字符串按照一定的编码规则转换为汉字或汉字串,再输入到目的地。由于应用程序各不相同,用户不可能自己去设计转换程序,因此,汉字输入由 Windows 系统进行管理。IMM(Input Method Management):输入法管理器。这是

5、 Windows 操作系统多语言支持环境的内在组成部分。操作系统通过输入法管理器管理当前系统中活动的各个输入法编辑器,维护输入法编辑器和应用程序之间的通信。IMP(Input Method Profile):输入法分析器。该模块负责维护系统所安装的各种汉字输入法的有关信息,并负责更新保存这些信息的 IMEINFO.INI 文件。IME(Input Method Editor):输入法编辑器。这是汉字输入法程序员所需编写的主要部分。具体每种输入法的算法就在该模块中实现。该模块从系统中接收键盘消息,经过输入法所定义的有关转换产生汉字字符或词组。WINNLS: WINNLS.DLL 是 WINDOW

6、S 简体中文版中汉字支持的核心。上述的三个系统提供的用于支持汉字输入法的模块都包含在这个 DLL 文件中。2.1 输入法与系统的关系Windows 用户在使用各种应用软件时,键盘输入中文时经过以下各种过程,下面这个过程是一个比较典型的中文输入过程:(1)用户按下键盘,键盘驱动程序向 Windows 发送及时信息;(2)Windows 将键盘事件处理转换键盘信息传送给输入法管理器;(3)输入法管理器调用当前使用的输入法 IME 的函数 ImeProcessKey (),传送键盘信息到输入法 IME;(4)输入法 IME 接收到键盘消息,开始输入到中文的转换,如果不进行转换,则输入法管理器将其直接

7、送到应用程序;(5)将转换好的中文字符(串),输入法 IME 通过 ImeToAsciiEx()返回参数发送中文字符(串)到输入法管理器;(6)输入法管理器通过 Windows 向应用程序发送 WM_IME_REPORT 信息,使用 IR_DBCSCHAR 参数查询应用程序是否具有双字节能力,如果应用程序能接收双字节,则输入法管理器向应用程序发送一个 WM_CHAR 消息传送一个汉字(其中 wParam 参数是双字节汉字),如果应用程序不能接收双字节,则输入法管理器向应用程序发送两个 WM_CHAR 消息传送一个汉字(第一次wParam 参数的低字节是汉字的第一字节,第二次 wParam 参数

8、的低字节是汉字的第二字节)。对于笔输入、语音输入和鼠标输入方式输入中文的用户,一般是通过以下过程输入中文:(1)输入设备将接收到的数据传送到输入法驱动程序;(2)输入法驱动程序将接收到的数据进行识别,转换成为众位字符(串);(3)调用函数传送中文字符(串)到输入法管理器,输入法管理器通过Windows 将中文字符(串)输入到应用程序。输入法的程序后缀名为 ime,数据文件后缀名为 MB,即通常说的输入法编码表(字典)。实际上 IME 文件是一个动态连接库程序(DLL),它与 DLL文件没有区别,只是名称不同而已。2.2 IME 处理过程输入法编辑器(IME),又叫做前端处理器,允许用户使用键盘

9、,输入在各国书面语言中使用的各种字符,从而达到输入非拼音文字的目的。目前,在Windows 下通过 IME 可以输入中文、日文、韩文等远东国家的象形文字。 Windows 中所带的标准 IME 是基于各个国家中 图 2 IME 的原理流程图使用的最流行的输入方法,还有许多第三方销售商也出售 IME 包。一个IME 一般包含一个转换引擎,用于将键盘上的按键转换到表意或表音文字,这个转换工作主要依靠一张输入码对照表来完成。用户采用以下这几种方法来构造每个字符:通过子根、通过发音表或者通过键入字符的数字代码页索引。当用户在键盘上按下键后,IME 的转换引擎截获这个按键,判别按键的类型,根据类型或进行

10、状态处理,或进行输入码到汉字机内码的转换,或提示重码供选择,或直接返回给应用程序,从而实现一个 IME 应有的功能。IME 的原理如图2 所示 2.3 IME 的组成部分输入法程序为用户与 WINDOWS 操作系统提供了两个接口,即 IME 转换接口(IME Conversion Interface)和 IME 用户接口(IME User Interface)。IME 转换接口以函数集的形式出现,这些函数一般由输入法管理器 IMM 和应用程序调用。主要完成以下工作:(1)IME 的初始化和关闭;(2)代码转换,包括输入码到汉字词和汉字词到输入码的转换;(3)IME 的设置以及 IME 的界面、

11、状态的修改;(4)输入字符的处理; (5)定义新的词组。IME 用户接口则以窗口形式出现,是由一些可见或不可见的窗口组成的,主要的作用是接受各种消息以及为 IME 提供用户接口的界面。用户接口的各个窗口组成如图 3 所示。IME 窗口是基于 Windows 的 User.exe 中 “ime”这个类的一个不可见窗口。应用程序可以创建 IME 窗口,一个应用程序对应一个 IME 窗口,它管理应用程序所有的可选输入法,通过处理消息 WM_IME_SELECT 在多个输入法间切换,处理输入法中的用户接口以及应用程序和 IMM 发送到输入法的所有消息。UI 窗口是某个输入法的总控窗口,它是 IME 窗

12、口的一个子窗口。它的作用是接受由 IMM 和应用程序发送来的消息,并根据消息进行相应的处理。另外,它还创建状态窗口、输入窗口和候选窗口,并保存这些窗口的基本数据。状态窗口用于显示当前的输入法状态,如输入法名称、半角/全角、中西文状态、中文/西文标点符号和软键盘的等信息。输入窗口用于显示输入的输入码、部分结果字符串、错误信息等提示内容。候选窗口用于列出当前编码的全部汉字(串),供用户选择或查询。2.4 应用系统对 IME 的支持一个 Windows 系统中可能同时安装了多个 IME,而系统中也可能同时运行好多个应用程序,每一个应用程序可分别与一个 IME 之间建立联系。应用系统可以向 IME 发

13、送消息。这些消息允许应用系统请求 IME 处理 IME 转换窗口的定位,允许或禁止转换窗口的显示,在转换窗口使用某一种字体,以及执行某一个虚键等。在具有多语言支持环境的 Windows 系统中,每一个应用系统的窗口都有一个输入上下文句柄,该句柄是一个指向特定输入上下文(Input Context)的指针,其中记录与输入法编辑器有关的用户输入信息。输入法管理器通过它保存和维护与输入法编辑器有关的数据(如转换状态、写作串、候选列表内容等),实现与输入法编辑器和应用程序的数据通信。根据应用系统对 IME 消息的处理多少把输入法应用程序分为三类:IME 不受控的应用程序、IME 部分受控的应用程序和

14、IME 全受控的应用程序。(1)IME 不受控的应用程序(IME unaware application) 该类型应用程序虽然不能控制 IME,且不能产生自己的 IME 窗口和输入环境(Input Context),但是一旦输入双字节字符(DBCS characters),系统默认的输入法窗口(Default IME Window)和输入环境(Default Input Context) 即能将输入的字符传送给应用程序。(2)IME 部分受控的应用程序(IME half aware application)该类型应用程序可利用系统预定义的 IME 类产生自己的 IME 窗口(Applicati

15、on IME Window),并可将输入环境传递给应用程序,因此应用程序可控制 IME 的不同环境( 例如 IME 的打开与关闭、IME 的组成形式等),但应用程序并不显示 IME 任何用户接口。(3)IME 全受控的应用程序(IME full aware application)该类型应用程序可完全控制 IME,通过自身就能获取输入环境,并显示各种必要的信息。 此时,IME 只在幕后负责必要的处理与消息提供,使用者的输入操作接口完全由应用程序负责维护。IME 全受控的应用程序从 IME DLL 接管了绘制 IME 窗口(状态、写作和候选窗口)的责任、创建并维护它们自己的输入上下文。这类应用系

16、统可以完全的定制这些窗口的外观,包括确定其屏幕位置以及选择显示器中字符所用的字体和字体风格等等。而 IME DLL 仍然确定在 IME 写作和候选窗口中显示哪些字符,并且它还处理字符猜测和在 IME 字典中进行字符查找的算法。3、IME 的实现输入法的实现主要是对 IME 转换界面的接口函数的实现。以下这些函数在适当的时候供输入法管理器调用,其实并不是每一个输入法编辑器在实现时都需要在这些接口函数中添加代码,大部分情况下很多函数保留一个空函数体即可。程序中的输出函数(必须)即文件“.def”中的函数,以下为函数的名称及功能论述,参考 MSDN 中的有关文档。ImeInquire:此接口函数在用

17、户选择某个输入法时最先由输入法管理器调用,以获得该输入法的有关信息。函数应返回输入法编辑器的初始化信息,在IMEINFO 结构中设置当前输入法的各种属性,以及当前输入法的用户界面窗口类名称。ImeProcessKey:此接口函数由输入法管理器在处理键盘事件时调用。在此函数中对键盘事件进行预处理,根据此函数的返回值,系统确定对于特定的输入上下文来说此键盘事件是否应送交输入法编辑器进行处理。如果返回TURE,则表示应该先把键盘消息传到输入法编辑器进行处理,所以输入法管理器会接着继续调用 ImeToAsciiEx 函数;如果返回 FALSE,说明此消息不需要输入法编辑器进行处理,输入法管理器将其直接

18、送到应用程序。ImeToAsciiEx:根据输入法上下文的内容,使输入法编辑器的转换引擎产生转换结果,将相应的字符消息放入制定缓冲区中,返回值是产生消息的条数,如果此数量大于消息缓冲区的长度,系统转而从输入法上下文的 hMsgBuf 项中度区消息的内容。该函数和 ImeProcessKey 函数一起构成了键盘输入方式下输入法编辑器转换引擎的主体。ImeSelect :此接口函数在用户打开或关闭输入法上下文时被调用。在此函数中对输入法上下文内容进行初始化或恢复释放。在实现某个输入法编辑器的时候,可能需要对输入法上下文中包含的内容项进行扩充,扩充后的输入法上下文称为此输入法的是由上下文。在打开输入

19、法时,函数的 fselect 参数为TRUE,需要完成对标准的输入法上下文的扩充工作,申请追加内存,预设各个内容项的初值;在关闭输入法时,fSelect 参数为 FALSE,需要释放思友上下文申请的附加资源。ImeSetActiveContext:如果在某个窗口中打开了输入法编辑器,那么此函数会在应用程序窗口获得或失去输入焦点时被调用。在此函数中可以获得当前的输入法上下文并通知输入法编辑器用户界面窗口组件,令其刷新显示。NotifyIME :系统或应用程序通知输入法编辑器其根据参数修改输入法编辑器的当前状态。比如:显示、隐藏候选窗口,选定某个后选项,更新候选窗口页起始位置和页尺寸,更新输入法上

20、下文内容,修改写作串内容等等。ImeDestroy :结束输入法编辑器的工作。ImeCoversionList:根据输入上下文的有关内容,将一个字符或者字符串转换成远东字符结果列表或者另一个字符串。此函数的作用是在输入串和结果串之间进行转换以便于进行重新转换,所以在此函数中不应该产生任何相关的输入法编辑器消息。ImeEscape :应用程序通过调用这个函数可以直接访问某个输入法编辑器的特定功能,这些功能通常无法通过其他的 IMM 函数调用实现。这么做的目的主要是为了支持特定语种的函数或者 IME 的私有函数。ImeSetCompositionString:根据参数中给出的数据,修改写作字符串。

21、这个函数将向输入法编辑器发送一条 WM-IME-COMPOSITION 消息。ImeRegisterWord:向输入法编辑器的词典里增加一个新词。ImeUnregisterWord:把某个词从输入法编辑器的词典里去掉。ImeGetRegisterWordStyle:取得本输入法编辑器支持的词风格的列表。ImeEnumRegisterWord:列出符合给定条件的所有字符串。4、结束语本文分析了 Windows IME 实现的基本原理、输入法的体系结构和设计中的一些关键技术,Windows IME 体系结构不仅为我们设计新的 IME 提供了规范,而且也为我们留了足够的空间来实现 IME 特有的各种功能。输入法程序设计所涉及的知识及技术还包括软键盘处理、鼠标输入、输入法注册、输入法数据结构及文件格式等。限于篇幅,仅对部分程序设计的实现方法作了说明,可供大家参考。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报