IME输入法编程
第一章 Windows9x系统下汉字输入法的基本原理
Windows系统下汉字输入法实际上是将输入的标准ascii字符串按照一定的编码规则转换为汉字或汉字串,进
入到目的地。
由于应用程序各不相同,用户不可能自己去设计转换程序,因此,汉字输入自然而然落到WINDOWS系统管理中。
一、输入法与系统的关系
键盘事件 应用程序
| |
Windows的USER.EXE
|
输入法管理器
|
输入法
系统的键盘事件有windows的user.exe软件接收后,user.exe在将键盘事件传导输入法管理器(Input Method
Manager, 简称IMM)中,管理器 再将键盘事件传到输入法中,输入法根据用户编码字典,翻译键盘事件为对
应的汉字(或汉字串), 然后再反传到user.exe中,user.exe再将翻译后的键盘事件传给当前正运行的应用
程序,从而完成汉字的输入。
二、汉字输入法的组成
微软Windows9x系统中汉字输入法的名称是"Input Method Editor" ,简称IME,输入法的程序名称为:*.ime,数据文
件名称为*.MB,即通常说的输入法编码表(字典).
实际上IME文件是一个动态连接库程序(DLL),它与dll文件没有区别,只是名称不同而已。
一般汉字输入法都由三个窗口组成:
状态窗口(Status Windows)-显示当前的输入法状态(中文还是英文等站环信息);
编码输入窗口(Composition Windows)-显示当前击键情况;
汉字选择窗口(Candidates Windows)-列出当前编码的全部汉字(串),供用户选择或查询。
上述三个窗口由基本的用户接口(User Interface )函数管理着。
现在我们用Dumpbin.exe打开微软提供的拼音输入法(WINDOWS\SYSTEM\WINPY.IME)看看它有什么组成(这里一
WINDOWS98为例,并假定windows系统安装在c:盘下):
C:\Dumpbin c:\windows\system\winpy.ime
Microsoft (R) COFF Binary File Dumper Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Dump of file WINPY.IME
File Type: DLL //IME 实际为dll程序
Section contains the following exports for WINPY.ime
0 characteristics
34A37323 time date stamp Fri Dec 26 17:04:35 1997
0.00 version
1 ordinal base
19 number of functions //共有19个函数
19 number of names // 对应19个名称
ordinal hint RVA name
1 0 0000A010 CandWndProc //"选择汉字窗口"注册函数
2 1 0000E750 CompWndProc //"输入编码窗口"注册函数
3 2 0000FB50 ImeConfigure //配置当前ime参数函数
4 3 0000FEC0 ImeConversionList//将字符或字符串转换成目标字符
5 4 0000FFA0 ImeDestroy //退出当前使用的IME
6 5 000030D0 ImeEnumRegisterWord
7 6 0000FFB0 ImeEscape //应用软件访问输入法的接口函数.
8 7 00003080 ImeGetRegisterWordStyle
9 8 0000E9A0 ImeInquire //启动并初始化当前IME输入法
10 9 0000A800 ImeProcessKey //IME输入键盘事件管理函数
11 A 00002C20 ImeRegisterWord //向输入法字典注册字符串
12 B 000109A0 ImeSelect //启动当前IME输入法
13 C 000109E0 ImeSetActiveContext //设置当前的输入处于活动状态.
14 D 0000C850 ImeSetCompositionString 由应用程序设置输入法编码
15 E 0000AEE0 ImeToAsciiEx //将输入的键盘事件转换为汉字编码事件
16 F 00002F40 ImeUnregisterWord //删除被注册的字符串.
17 10 0000CA90 NotifyIME //IME事件管理函数
18 11 00005160 StatusWndProc //状态窗口注册函数
19 12 00002350 UIWndProc //用户界面接口函数
Summary
5000 .ShareDa
7000 .data
2000 .idata
1000 .rdata
3000 .reloc
5000 .rsrc
2000 .sgroup
18000 .text
从上述可以看出,IME程序共有19个出口函数组成,每一个函数都有特定的格式,它们担负着与windows
系统传递信息的作用,这些函数是供Windows系统调用的。
三、输入法的函数简介
下面我们将介绍上述各个函数的功能及接口格式。
1. BOOL ImeInquire( //初始化IME
LPIMEINFO lpIMEInfo, //用于初始化该输入法的结构地址
LPTSTR lpszWndClass, //当前输入法的名称
LPCTSTR或者dword lpszData //系统信息,9X系列值为0,NT/2000下有实际值
)
如果该函数初始化成功,返回TURE,否则为FALSE
用户应该搞清楚IMEINFO结构,特关系着你设计的输入法是否成功.有关该结构请看"结构"一章.
2.DWORD IMEConversionList( // 将某字符或字符串转换成目标字符串
HIMC hIMC, // 与当前输入法相关的应用程序句柄
LPCTSTRlpSrc, // 要转换的字符串 (也可能是结果串,可由uFlag指定)
LPCANDIDATELIST lpDst, /// 转换后的字符串(也可能是源串,可由uFlag指定)
DWORD dwBufLen, //转换后有几个字符
UINT uFlag //指定结果的存放位置
)
如果成功,返回转换后的字符串长度
3.BOOL ImeConfigure( //用户设置输入法接口
HKL hKL, //当前输入法句柄
HWND hWnd, //配置窗口的父窗口
DWORD dwMode, //配置什么
LPVOID lpData //用户设置的数据
)
该函数的功能是提供给输入法使用者一个可以更改某些隐含设置的能力.
如果你用过别人的输入法,其中的"配置输入法..."功能既是也!
对于一个初写输入法的人,可以不予理它.
4.BOOL ImeDestroy( //关闭当前输入法
UINT uReserved //无用 (0)
)
成功返回TURE,否则为FALSE
5.LRESULT ImeEscape( //用户软件访问输入法内部信息的接口
HIMC hIMC, //当前的应用程序句柄
UINT uEscape, //设置函数功能
//=IME_ESC_QUERY _SUPPORT
//=IME_ESC_RESERVED_LAST IME_ESC_RESERVED_FIRST
//=IME_ESC_PRIVATE_FIRST IME_ESC_PRIVATE_LAST
//=IME_ESC_SEQUENCE_TO_ INTERNAL
//=IME_ESC_GET_EUDC_ DICTIONARY
//=IME_ESC_SET_EUDC_ DICTIONARY
//=IME_ESC_MAX_KEY
//=IME_ESC_IME_NAME
//=IME_ESC_SYNC_HOTKEY
//=IME_ESC_HANJA_MODE
//=IME_ESC_GETHELPFILENAME(只适应 Windows 98和Windows 2000)
//=IME_ESC_PRIVATE_HOTKEY(w95下不可用)
LPVOID lpData //当前功能所需的数据
)
如果失败,返回0,否则有个功能决定
有时,人们可以用此函数怀区输入法的名称、帮助文件名称等。当然,我们可以不提供这些功能。
6、BOOL ImeSetActiveContext( //激活或搁置当前的输入法
HIMC hIMC, //当前用户程序句柄
BOOL fFlag //激活或搁置:=TRUE 激活 =FALSE 搁置
)
成功返回TRUE,否则为FALSE
7、BOOL ImeProcessKey( //处理应用程序传入的所有击键事件,监测是否是当前输入法所需的
HIMC hIMC, //应用程序句柄
UINT uVirKey, //需处理的虚键
DWORD lParam, //击键消息参数
CONST LPBYTE lpbKeyState //当前键盘状态(256字节)
)
如果此键是该输入法需要的,则返回TRUE,否则为FALSE
只有返回true的击键,IME才去处理
8、BOOL NotifyIME( //输入法选择窗口状态管理函数:
HIMC hIMC, //当前的应用程序句柄
DWORD dwAction, //状态值
DWORD dwIndex, //与状态值有关的序号
DWORD dwValue //与状态值有关的值
)
状态值说明:
=NI_OPENCANDIDATE 打开编码选择窗口
=NI_CLOSECANDIDATE 关闭当前的编码选择窗
=NI_SELECTCANDIDATESTR 选摘编码
此时:dwIndex 被选择的编码列表序号.
dwValue 被选中的编码在当前的编码列表中的序号
=NI_CHANGECANDIDATELIST 改变当前的编码列表(按pageup等键操作)
此时:dwIndex 被选择的编码列表序号.
dwValue 不用
=NI_SETCANDIDATE_PAGESTART 设置编码开始页号
此时: dwIndex 被改变的编码列表序号
dwValue 新页的开始序号.
=NI_SETCANDIDATE_PAGESIZE 改变编码列表页的大小
此时:dwIndex 当前编码页序号
dwValue 新的页大小
=NI_CONTEXTUPDATED 更新应用程序的信息的输入法的信息:移动位置,设置模式,设置编码窗口,字体。
此时:dwIndex 只用于 dwValue=IMC_SETCONVERSIONMODE, IMC_SETSENTENCEMODE
dwValue 可取由 WM_IME_CONTROL 发送的下列值:
IMC_SETCANDIDATEPOS
IMC_SETCOMPOSITIONFONT
IMC_SETCOMPOSITIONWINDOW
IMC_SETCONVERSIONMODE
IMC_SETSENTENCEMODE
IMC_SETOPENSTATUS
=NI_COMPOSITIONSTR 改变编码窗口中的编码
此时:dwIndex 取下列值:CPS_COMPLETE 完成编码转换
CPS_CONVERT 转换编码
CPS_REVERT 取消当前的编码
CPS_CANCEL 清除编码,并关闭编码窗
dwValue 不用
此函数成功,返回TRUE,否则为FALSE
9、BOOL ImeSelect( //初始化输入法
HIMC hIMC, //当前应用程序句柄
BOOL fSelect //是否初始化当前输入法,TRUE表示初始化
)
返回:成功返回true,否则为FALSE
The ImeSetCompositionString function is used by an application to set the IME
composition string structure with the data contained in the lpComp or lpRead
parameters. The IME then generates a message.
10、BOOL WINAPI ImeSetCompositionString( //将编码窗口中输入的编码保存的编码结构中,
//同志发送编码完成的消息
//( WM_IME_COMPOSITION)给系统,
HIMC hIMC, //当前的应用程序句柄
DWORD dwIndex, //设置此函数功能
//=SCS_SETSTR
//=SCS_CHANGEATTR
//=SCS_CHANGECLAUSE
//= SCS_QUERYRECONVERTSTRING
//=SCS_RECONVERTSTRING
//=SCS_SETRECONVERTSTRING
LPCVOID lpComp, //编码数据区
DWORD dwCompLen, //编码数据区长度
LPCVOID lpRead, //读入的编码数据
DWORD dwReadLen //读入的编码数据长度
)
11、UINT ImeToAsciiEx( //转换编码称汉字(串)
UINT uVirKey, //虚键
UINT uScanCode, //扫描码
CONST LPBYTE lpbKeyState, //用户定义的键盘状态
LPDWORD lpdwTransBuf, //转换后的数据存放区
UINT fuState, //活动菜单标志
HIMC hIMC //当前的应用程序句柄
)
返回:返回值表示有几个消息,可理解为:本编码对应的汉字串有几个汉字组成(当然,这并不相等)。
12、BOOL WINAPI ImeRegisterWord(
LPCTSTR lpszReading,
DWORD dwStyle,
LPCTSTR lpszString
)
13、BOOL WINAPI ImeUnregisterWord(
LPCTSTR lpszReading,
DWORD dwStyle,
LPCTSTR lpszString
)
14、UINT WINAPI
ImeGetRegisterWordStyle(
UINT nItem,
LPSTYLEBUF lpStyleBuf
)
15、UINT WINAPI ImeEnumRegisterWord(
hKL,
REGISTERWORDENUMPROC lpfnEnumProc,
LPCTSTR lpszReading,
DWORD dwStyle,
LPCTSTR lpszString,
LPVOID lpData
)
16、DWORD WINAPI ImeGetImeMenuItems(
HIMC hIMC,
DWORD dwFlags,
DWORD dwType,
LPIMEMENUITEMINFO lpImeParentMenu,
LPIMEMENUITEMINFO lpImeMenu,
DWORD dwSize
)
四.ime的版本信息(与普通DLL的区别)
VS_VERSION_INFO VERSIONINFO 代表字符 含义
FILEVERSION 4,0,0,950 //4.00.950 95版
PRODUCTVERSION 4,0,0,950 //4.00.950 95版
FILEFLAGSMASK 0x3fL
FILEFLAGS 0xaL
FILEOS 0x10004L //VOS_DOS_WINDOWS32 WIN32软件,可在DOS下运行
FILETYPE 0x3L //VFT_DRV 驱动程序
FILESUBTYPE 0xbL //VFT2_DRV_INPUTMETHOD 输入法驱动程序
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080403a8"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "唐码软件开发工作室\0"
VALUE "FileDes cription", "唐码输入法 版本1.0\0"
VALUE "FileVersion", "4.00.950\0"
VALUE "InternalName", "唐码输入法 版本1.0\0"
VALUE "LegalCopyright", "Copyright (C) 唐码软件开发工作室 1999-1999\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "TM.IME\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "唐码输入法 版本1.0\0"
VALUE "ProductVersion", "4.00.950\0"
VALUE "SpecialBuild", "\0"
END
分享到:
相关推荐
### Windows9x系统下汉字输入法的基本原理 #### 一、输入法与系统的关系 在Windows9x系统中,汉字输入法与系统之间的交互过程是非常关键的。这一过程可以简化为以下几个步骤: 1. **键盘事件接收**:当用户通过...
在Windows操作系统中,IME(Input Method Editor)输入法编辑器是一种关键组件,它允许用户通过非拉丁字符集输入文本,特别是在使用中文、日文、韩文等语言时。Windows IME编程涉及到创建自定义的输入法,以满足特定...
在Windows操作系统中,IME(Input Method Editor)输入法引擎是一种至关重要的组件,它允许用户通过键盘或其他输入设备在各种语言环境中输入非拉丁字符。Windows IME输入法编程涉及到创建、修改或扩展内置的输入法...
本文档旨在介绍在IME(Input Method Editor,输入法编辑器)框架下开发输入法的基本原理与思路,并以微软拼音输入法为例进行详细介绍。通过本指南,开发者可以了解到如何利用各种API函数来实现输入法的核心功能,...
IME输入法在Windows 9x系统中的实现主要依赖于以下组件: 1. **IME文件**:IME文件以*.ime扩展名存储,实质上是一个动态链接库(DLL)。它包含了IME的主要功能代码。 2. **数据文件**:以*.MB扩展名存储的文件,通常...
#### 一、Windows9x系统下汉字输入法的基本原理 在Windows9x系统中,汉字输入法(IME, Input Method Editor)是实现汉字输入的关键技术之一。其核心功能是将标准ASCII字符序列按照特定的编码规则转换为汉字或汉字串...
IME 输入法编程 IME 输入法编程是指在 ...IME 输入法编程是 Windows 操作系统中的一种重要的技术,开发者需要了解 WM_IME_SETCONTEXT 和 WM_IME_CONTROL 两种消息的处理机制,以便实现输入法的输入、编辑和显示。
WINDOWS下输入法编程是指在WINDOWS操作系统下开发输入法相关的程序,涉及到各种WINDOW消息及其对应的处理方法。本章节将详细讲解WINDOWS下输入法编程的知识点。 一、WM_IME_SETCONTEXT消息 WM_IME_SETCONTEXT是...
IME(Input Method Editor)输入法是计算机系统中用于在各种语言环境下输入文字的重要工具,尤其在中文、日文、韩文等非拉丁字符集的语言环境中不可或缺。VC(Visual C++)是微软公司开发的一种C++集成开发环境,常...
通过深入研究这个源码,不仅可以掌握易语言的编程技巧,还能了解到IME输入法的设计原理,对于想要在易语言环境下开发自定义输入法或者对输入法技术感兴趣的开发者来说,这是一个宝贵的参考资料。同时,这个项目也...
Windows IME(Input Method Editor)是Windows操作系统中的一个重要组件,用于支持各种语言的输入,特别是非拉丁字符集的语言,如中文、日文和韩文等。IME的主要功能是将用户的键盘输入转换为特定语言的字符,它通过...
IME(Input Method Editor)输入法是计算机系统中用于输入汉字和其他非拉丁字符的重要工具,尤其在中文操作系统中不可或缺。IME输入法允许用户通过键盘输入,然后转换为所需的汉字或符号,极大地方便了中文用户的...
Windows IME(Input Method Editor)是Windows操作系统中的一个重要组件,用于支持各种语言的输入,特别是非拉丁字符集的语言,如中文、日文和韩文等。IME的主要功能是将用户的键盘输入转换为特定语言的字符,它通过...
Windows IME(Input Method Editor)是Windows操作系统中的一个重要组件,用于支持各种语言的输入,特别是非拉丁字符集的语言,如中文、日文和韩文等。IME的主要功能是将用户的键盘输入转换为特定语言的字符,它通过...
在Windows系统中,IME通常位于"C:\Windows\IME"目录下,它包含了各种语言的输入法引擎,使得用户可以在键盘上输入非拉丁字符,如汉字、日文、韩文等。 在本主题中,"ime.rar"是一个压缩包文件,可能包含了一套或...
### Windows系统下汉字输入法的基本原理 #### 一、输入法与系统的关系 在Windows系统中,汉字输入法的工作机制是通过一系列复杂的过程实现的。首先,需要理解的是,输入法(Input Method Editor, IME)是Windows...
《VC++创建Windows IME输入法详解》 在Windows操作系统中,IME(Input Method Editor,输入法编辑器)...开发者需要有扎实的C++基础和对Windows系统机制的深入理解,才能成功地构建出一款高效且功能丰富的IME输入法。
总之,正版的日文XP系统输入法IME文件是为那些需要在Windows XP环境下进行日文输入的用户准备的必要工具。通过正确安装和设置,用户可以轻松地在英文系统中实现日文输入,提升工作效率。请务必确保下载来源的合法性...
在IT领域,输入法(IME,Input Method Editor)是操作系统中不可或缺的一部分,它允许用户在非英文环境下输入各种语言字符,比如中文、日文、韩文等。在现代软件开发中,特别是在涉及到用户交互界面的设计时,理解并...