`

IME编程心得

阅读更多

 

IME编程心得

一、基础知识:(不断补充) 

1.输入法管理器(IMM) 

2.输入法编程器(IME) 

3.输入上下文(IC) 

4.应用程序(App) 

 

二、IMM-IME结构的基本工作过程及特点 

用户键盘消息->系统通过IMM传递给与当前线程对应的IME->IME根据输入的消息和输入上下文中记录的数据,将用户的键盘动作转换成结果串->以字串消息的形式返回给IMM->放到应用程序窗口的消息队列中。 

 

三、IME的构成 

1.IME转换接口(IME conversion interface) 

2.IME用户接口(IME user interface) 

由用户实现的一组窗口,这些窗口用来接收和处理由IMM发来的输入消息,提供与用户交互的界面.由下面的窗口组成: 

1)缺省的IME窗口(Default IME window) 

2)用户接口窗口(UI interface) 

3)用户接口窗口的组件:状态窗口(status window);编码窗口(compsition window);候选窗口(candidate window). 

4)软键盘和系统菜单/图标等 

 

四、IME的实现 

1.IME转换接口的实现 

这些接口函数在供管理器在适当的时候调用.这些函数并非每个都要进行自己的处理,大部分保留一个空函数即可,但没有却不可.系统默认是要调用的,找不到就不行.有以下函数: 

1)ImeInquire 

2)ImeConfigure 

3)ImeProcessKey 

4)ImeToAsciiEx 

5)ImeSelect 

6)ImeSetActiveContext 

7)NotifyIME 

8)ImeDestroy 

9)ImeConversionList 

10)ImeEscape 

11)ImeSetCompsitionString 

12)ImeRegisterWord 

13)ImeUnregisterWord 

14)ImeGetRegisterWordStyle 

15)ImeEnumRegisterWord 

2.IME用户接口的实现 

主要包括用户接口窗口(窗口类和窗口过程),用户界面窗口的组件(状态窗口,编码窗口和候选窗口的窗口类和窗口过程),输入法的配置窗口,软键盘,任务条上的指示器窗口(图标,菜单,工具提示)和输入法热键等. 

1)用户接口窗口:编程中主要是处理由缺省的IME窗口传入的IME消息,当然,并非所有的IME消息都需要给出具体处理(可以看出这是IME编程中的一个原则).如: 

WM_IME_COMPOSITION 

WM_IME_STARTCOMPSITION/WM_IME_ENDCOMPOSITION 

WM_IME_SELECT 

WM_IME_NOTIFY 

WM_IME_CHAR 

 

五、具体实现步骤: 

IME实质上是一个DLL实现,由系统调用。而这个DLL则分别实现了系统要调用的功能函数。所以有些函数虽然不 

 

做什么事情,但是必需挂上一个空壳。否则调用出错。 

1.DLLMain()的架构 

1)进入进程 

DLL_PROCESS_ATTACH事件中,注册用户接口窗口类及其组件的窗口类:使用RegisterClassEx()完成此注册过程 

 

。设置类名字段(lpszClassName)为用户接口窗口类类名(包括结束标志'\0'在内最长可达16字符),在类风格 

 

(style)字段中必须包括CS_IME风格。设置附加内存大小(cbWndExtra)。 

 

 

2)退出进程 

注销上述与输入法编辑器有关的窗口类,进行全局性的清理工作。 

 

2.打开/关闭输入法编辑器时进行的初始化操作 

1)用户接口窗口是由缺省的IME窗口在接到WM_IME_SELECT消息时创建的。输入法管理器通过调用ImeRequire接 

 

口函数获取输入法编辑器的相关信息(属性、用户接口窗口类,可选项),据此进行输入法编辑器的初始化工作 

 

,创建输入法编辑器的用户接口窗口。所以ImeRequire是输入法转换接口必须实现的第一个函数。 

2)在用户接口窗口被创建后,可以进行输入法编辑器全局性的一些初始化工作,比如申请自己的私有内存,建 

 

立私有上下文等,这些工作一般在处理WM_IME_SELECT消息或在接口函数ImeSelect中进行,也可以在窗口过程 

 

处理WM_CREATE消息时进行。 

 

3.进入进程后: 

1)初始化词库 

2)创建字体 

3)注册窗口类 

 

4.在UI窗口建立后,建立写作窗口和候选窗口 

各个窗口下进行各自的消息函数处理 

在这里有疑问:UI窗口是什么?UI窗口处理了IME的好多消息.--解答参看<<基于IMM-IME输入法接口的实现方法>> 

下一个任务:看这个论文 

UI窗口是对用户不可见的,但是它是所有用户界面窗口的组件窗口的父窗口,是全部组件窗口的管理者. 

 

5.构建框架的问题 

在projects-settings-c/c++-catagory:prepossessor:additional include directories:./ 

避免添加系统默认的头文件 

 

6.注意的细节问题: 

1)global.c中的#pragma data_seg(".zhenhuadic"),应详细了解其作用,其与Czh.def中的定义有相关联的地方.(对我们的工程名Czh来说) 

2)freepy.exp : warning LNK4070: /OUT:Czh.ime directive in .EXP differs from output filename 

;C:\WINDOWS\system32\freepy.ime; ignoring directive 

对于这个BUILD中的错误,关联之处在于Czh.def中定义了lib的输出名为Czh,要求这个lib的输出名与Output file name freepy相同. 

3)如果.ime名和上述2)中说的问题没有的话,且freepy.h(原工程)中的#define FREEPYFILENAME   _T("freepy.ime")定义正确,则在HZfreepy.h中改变以下几个文件名与C:\windows\system32\(window xp系统下)下的相关文件名相同则可: 

freepy.tab--字库 

freepysys.dic--系统词库 

freepyusr.dic--用户词库 

4)在ImeSelect的函数中,有个注册表键值的处理与工程有关联 

5)有四条消息的遗漏: 

imm:NotifyIME 

imm:NotifyIME:NI_CONTEXTUPDATED 

imm:NotifyIME:NI_CONTEXTUPDATED:IMC_SETCOMPOSITIONWINDOW 

UIWnd 

UIWnd:WM_IME_NOTIFY 

UIWnd:WM_IME_NOTIFY:IMN_SETCOMPOSITIONWINDOW 

UIWnd:3 

UIWnd 

UIWnd:WM_IME_NOTIFY 

UIWnd:WM_IME_NOTIFY:IMN_SETOPENSTATUS 

UIWnd:3 

UIWnd 

UIWnd:WM_IME_NOTIFY 

UIWnd:WM_IME_NOTIFY:IMN_SETCONVERSIONMODE 

UIWnd:3 

UIWnd 

UIWnd:WM_IME_NOTIFY 

UIWnd:WM_IME_NOTIFY:IMN_SETSENTENCEMODE 

在开发过程中,初始化的四条消息缺漏.考察:与代码有关还是与安装有关? 

自己开发安装是手动完成的,即通过直接改注册表来实现的.为了检测,我将自己的开发代码工程作如下变动: 

----settings-output file name\freepy.ime 

----字库词库名不变,但存在system32目录下 

只要这样,就可以出现了上述的消息.这时还与ImeSelect下的注册表项读取无关、与czh.h中的文件名定义无关、与czh.def中的lib定义无关。但是在调试时,选择输入法时却可将本工程的图标之类的调出来。这样看来,只是无法输入文字(还没实现相关的功能),目前的结论是:四个消息的遗漏与安装有关。 

7)制作安装程序:仿照freepy的安装程序,制作一个自己的安装程序,然后重新安装,安装之后要进行更新,也就是到输入法的添加删除界面进行删除然后再添加进来,注销系统之后,就可以用了. 

这样安装的结果是:多出了上面的第二条消息,其它仍然不行.--哪究竟与谁有关系?是不是与代码有关? 

只要将,settings中的作改变就可以实现消息补充.这与什么有关系? 

8)再重新安装一次,这次重装是这样的: 

--HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts\下对应的振华输入法子项都删除 

--HKEY_CURRENT_USER\Keyboard Layout\preload 下对应的本输入法的子项删除 

--HKEY_LOCAL_MACHINE\software\下的czhhua删除. 

这样重装之后,消息出现. 

 

7.流程分析: 

1)字库的装载 

这个工作是在程序进入DLL的开始部分就执行的,将字典内容保存到存储区,以备将COMPSTR转成汉字时调用存储区. 

 

分享到:
评论

相关推荐

    WINDOWS下IME编程

    在Windows操作系统中,IME(Input Method Editor)编程是开发输入法的重要部分,它允许用户通过非拉丁字符集(如汉字、日文、韩文等)输入文本。IME编程涉及到Windows API调用、消息处理和本地化策略,为用户提供...

    《初探WINDOWS下IME编程》配套源代码

    《初探WINDOWS下IME编程》是一本专注于探讨如何在Windows操作系统环境下进行输入法(IME,Input Method Editor)开发的专业书籍。IME是操作系统中一个至关重要的组件,它负责处理用户输入,特别是对于非拉丁字符集的...

    IME编程例子

    介绍了如何获取IME信息,极有价值: It shows how to control IME mode using C/C++. You can set the initial IME mode of CIMEEdit as to input language, shape, and so on. If you want your edit control ...

    Windows IME 输入法编程

    Windows IME编程涉及到创建自定义的输入法,以满足特定的输入需求或者提供更高效的输入体验。以下是对这个主题的详细讲解: 1. **IME架构** - Windows IME系统由多个组件组成,包括IME核心、候选窗口、转换引擎和...

    商业编程-源码-《初探WINDOWS下IME编程》配套源代码.zip

    《初探WINDOWS下IME编程》配套源代码是一个深入学习Windows平台输入法引擎(IME)开发的重要资源。IME,全称为Input Method Editor,是操作系统中用于输入非拉丁字符集的软件组件,尤其对于中文、日文、韩文等亚洲...

    IME输入法编程VC资料

    ### IME输入法编程VC资料知识点详述 #### 一、Windows9x系统下汉字输入法的基本原理 在Windows9x系统中,汉字输入法(IME, Input Method Editor)是实现汉字输入的关键技术之一。其核心功能是将标准ASCII字符序列...

    Window Ime 输入法编程

    在Windows Ime 输入法编程中,开发者可以创建自定义的IME,以满足特定的输入需求或者提供更加个性化的输入体验。这涉及到以下几个关键知识点: 1. **IME架构**:Windows IME基于COM(Component Object Model)组件...

    IME输入法编程指南

    ### IME输入法编程指南 #### 一、概述 本文档旨在介绍在IME(Input Method Editor,输入法编辑器)框架下开发输入法的基本原理与思路,并以微软拼音输入法为例进行详细介绍。通过本指南,开发者可以了解到如何利用...

    源码附件:VC--初探WINDOWS下的IME编程.rar_VC i_ime_注册表

    初探WINDOWS下IME编程源码: 大家知道,DELPHI许多控件有IME属性。这么好用的东西VC可没自带,怎么办呢?其实,可通过注册表,用API实现。下面说一下本人对IME的研究结果,并提供示例工程供大家参考:

    Windows IME输入法编程.rar

    Windows IME输入法编程涉及到创建、修改或扩展内置的输入法系统,以满足特定的语言输入需求。这个"Windows IME输入法编程.rar"压缩包可能包含了关于开发自定义输入法的相关资源和教程。 在Windows平台上,IME主要...

    IME输入法编程[文].pdf

    IME 输入法编程 IME 输入法编程是指在 Windows 操作系统中,开发者可以使用 IME(Input Method Editor)来实现输入法的编程。IME 输入法编程主要用于实现输入法的输入、编辑和显示。 在 Windows 操作系统中,IME ...

    Window Ime 输入法编程_rezip.zip

    在Windows Ime 输入法编程中,开发者可以创建自定义的IME,以满足特定的输入需求或者提供更加个性化的输入体验。这涉及到以下几个关键知识点: 1. **IME架构**:Windows IME基于COM(Component Object Model)组件...

    IME输入法编程.pdf

    ### IME输入法编程知识点详解 #### 一、IME输入法基本原理 IME(Input Method Editor,输入法编辑器)是一种用于将用户输入的标准ASCII字符转换为特定语言字符的技术,尤其是在处理非拉丁字母语言时尤为关键。在...

    IME系统五笔

    "IME系统五笔"是一款专为Windows操作系统设计的高效输入法工具,主要针对喜欢使用五笔字型输入的用户。这款IME(Input Method Editor)五笔输入法支持Windows XP、Windows 7以及Windows 8等多个操作系统版本,为用户...

    IME输入法VC编程的详细解说

    本篇文章将深入探讨如何使用VC进行IME输入法的编程,以帮助开发者理解IME的工作原理,并掌握在VC环境下创建自定义输入法的方法。 首先,我们需要了解IME的基本工作流程。IME输入法通常包含三个主要组件:候选窗口、...

    Window Ime 输入法编程_rezip1.zip

    在Windows Ime 输入法编程中,开发者可以创建自定义的IME,以满足特定的输入需求或者提供更加个性化的输入体验。这涉及到以下几个关键知识点: 1. **IME架构**:Windows IME基于COM(Component Object Model)组件...

    IME.zip_ime_切换输入法_输入法 _输入法编程

    本文将深入探讨“IME.zip_ime_切换输入法_输入法_输入法编程”这个主题,介绍如何通过编程实现在输入框获取和失去焦点时自动切换输入法。 首先,我们需要了解输入法的切换机制。在Windows系统中,输入法切换通常是...

    IME输入法编程.doc

    IME是什么?IME是在Windows平台上使用的标准的输入法接口规范。它实质是一个DLL,Windows为...关于具体接口的定义不是本文的重点,如果您需要了解只需要在网络中搜索“输入法编程指南”就可以明白 ,更多信息参考MSDN。

Global site tag (gtag.js) - Google Analytics