Windows9x系统下汉字输入法的基本原理.docx

上传人:b****4 文档编号:4818743 上传时间:2023-05-07 格式:DOCX 页数:36 大小:31.85KB
下载 相关 举报
Windows9x系统下汉字输入法的基本原理.docx_第1页
第1页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第2页
第2页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第3页
第3页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第4页
第4页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第5页
第5页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第6页
第6页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第7页
第7页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第8页
第8页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第9页
第9页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第10页
第10页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第11页
第11页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第12页
第12页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第13页
第13页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第14页
第14页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第15页
第15页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第16页
第16页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第17页
第17页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第18页
第18页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第19页
第19页 / 共36页
Windows9x系统下汉字输入法的基本原理.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Windows9x系统下汉字输入法的基本原理.docx

《Windows9x系统下汉字输入法的基本原理.docx》由会员分享,可在线阅读,更多相关《Windows9x系统下汉字输入法的基本原理.docx(36页珍藏版)》请在冰点文库上搜索。

Windows9x系统下汉字输入法的基本原理.docx

Windows9x系统下汉字输入法的基本原理

Windows9x系统下汉字输入法的基本原理

2008-05-1415:

05

Windows9x系统下汉字输入法的基本原理

转帖:

  Windows系统下汉字输入法实际上是将输入的标准ascii字符串按照一定的编码规则转换为汉字或汉字串,进入到目的地。

由于应用程序各不相同,用户不可能自己去设计转换程序,因此,汉字输入自然而然落到WINDOWS系统管理中。

一、输入法与系统的关系

     键盘事件  应用程序

       |    |

     Windows的USER.EXE

         |

       输入法管理器

         |

        输入法 

  系统的键盘事件有windows的user.exe软件接收后,user.exe在将键盘事件传导输入法管理器(InputMethodManager,简称IMM)中,管理器再将键盘事件传到输入法中,输入法根据用户编码字典,翻译键盘事件为对应的汉字(或汉字串),然后再反传到user.exe中,user.exe再将翻译后的键盘事件传给当前正运行的应用程序,从而完成汉字的输入。

二、汉字输入法的组成

微软Windows9x系统中汉字输入法的名称是"InputMethodEditor",简称IME,输入法的程序名称为:

*.ime,数据文件名称为*.MB,即通常说的输入法编码表(字典).

实际上IME文件是一个动态连接库程序(DLL),它与dll文件没有区别,只是名称不同而已。

一般汉字输入法都由三个窗口组成:

状态窗口(StatusWindows)-显示当前的输入法状态(中文还是英文等站环信息);

编码输入窗口(CompositionWindows)-显示当前击键情况;

汉字选择窗口(CandidatesWindows)-列出当前编码的全部汉字(串),供用户选择或查询。

上述三个窗口由基本的用户接口(UserInterface)函数管理着。

现在我们用Dumpbin.exe打开微软提供的拼音输入法(WINDOWS\SYSTEM\WINPY.IME)看看它有什么组成(这里一WINDOWS98为例,并假定windows系统安装在c:

盘下):

C:

\Dumpbinc:

\windows\system\winpy.ime

Microsoft(R)COFFBinaryFileDumperVersion6.00.8168

Copyright(C)MicrosoftCorp1992-1998.Allrightsreserved.

DumpoffileWINPY.IME

FileType:

DLL       //IME实际为dll程序

SectioncontainsthefollowingexportsforWINPY.ime

0characteristics

34A37323timedatestampFriDec2617:

04:

351997

0.00version

1ordinalbase

19numberoffunctions//共有19个函数

19numberofnames     //对应19个名称 

ordinalhintRVAname

100000A010CandWndProc  //"选择汉字窗口"注册函数

210000E750CompWndProc  //"输入编码窗口"注册函数

320000FB50ImeConfigure  //配置当前ime参数函数 

430000FEC0ImeConversionList//将字符或字符串转换成目标字符

540000FFA0ImeDestroy   //退出当前使用的IME

65000030D0ImeEnumRegisterWord

760000FFB0ImeEscape//应用软件访问输入法的接口函数.

8700003080ImeGetRegisterWordStyle

980000E9A0ImeInquire      //启动并初始化当前IME输入法

1090000A800ImeProcessKey    //IME输入键盘事件管理函数

11A00002C20ImeRegisterWord//向输入法字典注册字符串

12B000109A0ImeSelect//启动当前IME输入法

13C000109E0ImeSetActiveContext//设置当前的输入处于活动状态.

14D0000C850ImeSetCompositionString由应用程序设置输入法编码

15E0000AEE0ImeToAsciiEx    //将输入的键盘事件转换为汉字编码事件

16F00002F40ImeUnregisterWord//删除被注册的字符串.

17100000CA90NotifyIME   //IME事件管理函数

181100005160StatusWndProc //状态窗口注册函数

191200002350UIWndProc   //用户界面接口函数

Summary

5000.ShareDa

7000.data

2000.idata

1000.rdata

3000.reloc

5000.rsrc

2000.sgroup

18000.text

从上述可以看出,IME程序共有19个出口函数组成,每一个函数都有特定的格式,它们担负着与windows系统传递信息的作用,这些函数是供Windows系统调用的。

三、输入法的函数简介

下面我们将介绍上述各个函数的功能及接口格式。

1.BOOLImeInquire(//初始化IME

LPIMEINFOlpIMEInfo,//用于初始化该输入法的结构地址

LPTSTRlpszWndClass,//当前输入法的名称

LPCTSTR或者dwordlpszData//系统信息,9X系列值为0,NT/2000下有实际值

如果该函数初始化成功,返回TURE,否则为FALSE

用户应该搞清楚IMEINFO结构,特关系着你设计的输入法是否成功.有关该结构请看"结构"一章.

2.DWORDIMEConversionList(//将某字符或字符串转换成目标字符串

HIMChIMC,//与当前输入法相关的应用程序句柄

LPCTSTRlpSrc,//要转换的字符串(也可能是结果串,可由uFlag指定)

LPCANDIDATELISTlpDst,///转换后的字符串(也可能是源串,可由uFlag指定)

DWORDdwBufLen,//转换后有几个字符

UINTuFlag//指定结果的存放位置

如果成功,返回转换后的字符串长度

3.BOOLImeConfigure(//用户设置输入法接口

HKLhKL,//当前输入法句柄

HWNDhWnd,//配置窗口的父窗口

DWORDdwMode,//配置什么

LPVOIDlpData//用户设置的数据

该函数的功能是提供给输入法使用者一个可以更改某些隐含设置的能力.

如果你用过别人的输入法,其中的"配置输入法..."功能既是也!

对于一个初写输入法的人,可以不予理它.

4.BOOLImeDestroy(//关闭当前输入法

UINTuReserved//无用(0)

成功返回TURE,否则为FALSE

5.LRESULTImeEscape(//用户软件访问输入法内部信息的接口

HIMChIMC,//当前的应用程序句柄

UINTuEscape,//设置函数功能

//=IME_ESC_QUERY_SUPPORT

//=IME_ESC_RESERVED_LASTIME_ESC_RESERVED_FIRST

//=IME_ESC_PRIVATE_FIRSTIME_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(只适应Windows98和Windows2000)

//=IME_ESC_PRIVATE_HOTKEY(w95下不可用)

LPVOIDlpData//当前功能所需的数据

如果失败,返回0,否则有个功能决定

有时,人们可以用此函数怀区输入法的名称、帮助文件名称等。

当然,我们可以不提供这些功能。

 

6、BOOLImeSetActiveContext(//激活或搁置当前的输入法

HIMChIMC,//当前用户程序句柄

BOOLfFlag//激活或搁置:

=TRUE激活=FALSE搁置

成功返回TRUE,否则为FALSE

7、BOOLImeProcessKey(//处理应用程序传入的所有击键事件,监测是否是当前输入法所需的

HIMChIMC,//应用程序句柄

UINTuVirKey,//需处理的虚键

DWORDlParam,//击键消息参数

CONSTLPBYTElpbKeyState//当前键盘状态(256字节)

如果此键是该输入法需要的,则返回TRUE,否则为FALSE

只有返回true的击键,IME才去处理

8、BOOLNotifyIME(//输入法选择窗口状态管理函数:

HIMChIMC,//当前的应用程序句柄

DWORDdwAction,//状态值

DWORDdwIndex,//与状态值有关的序号

DWORDdwValue//与状态值有关的值

状态值说明:

=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、BOOLImeSelect(//初始化输入法

HIMChIMC,//当前应用程序句柄

BOOLfSelect//是否初始化当前输入法,TRUE表示初始化

返回:

成功返回true,否则为FALSE

TheImeSetCompositionStringfunctionisusedbyanapplicationtosettheIMEcompositionstringstructurewiththedatacontainedinthelpComporlpReadparameters.TheIMEthengeneratesamessage.

10、BOOLWINAPIImeSetCompositionString(//将编码窗口中输入的编码保存的编码结构中,

//同志发送编码完成的消息

//(WM_IME_COMPOSITION)给系统,

HIMChIMC,//当前的应用程序句柄

DWORDdwIndex,//设置此函数功能

//=SCS_SETSTR

//=SCS_CHANGEATTR

//=SCS_CHANGECLAUSE

//=SCS_QUERYRECONVERTSTRING

//=SCS_RECONVERTSTRING

//=SCS_SETRECONVERTSTRING

LPCVOIDlpComp,//编码数据区

DWORDdwCompLen,//编码数据区长度

LPCVOIDlpRead,//读入的编码数据

DWORDdwReadLen//读入的编码数据长度

11、UINTImeToAsciiEx(//转换编码称汉字(串)

UINTuVirKey,//虚键

UINTuScanCode,//扫描码

CONSTLPBYTElpbKeyState,//用户定义的键盘状态

LPDWORDlpdwTransBuf,//转换后的数据存放区

UINTfuState,//活动菜单标志

HIMChIMC//当前的应用程序句柄

返回:

返回值表示有几个消息,可理解为:

本编码对应的汉字串有几个汉字组成(当然,这并不相等)。

12、BOOLWINAPIImeRegisterWord(

LPCTSTRlpszReading,

DWORDdwStyle,

LPCTSTRlpszString

13、BOOLWINAPIImeUnregisterWord(

LPCTSTRlpszReading,

DWORDdwStyle,

LPCTSTRlpszString

14、UINTWINAPI

ImeGetRegisterWordStyle(

UINTnItem,

LPSTYLEBUFlpStyleBuf

15、UINTWINAPIImeEnumRegisterWord(

hKL,

REGISTERWORDENUMPROClpfnEnumProc,

LPCTSTRlpszReading,

DWORDdwStyle,

LPCTSTRlpszString,

LPVOIDlpData

16、DWORDWINAPIImeGetImeMenuItems(

HIMChIMC,

DWORDdwFlags,

DWORDdwType,

LPIMEMENUITEMINFOlpImeParentMenu,

LPIMEMENUITEMINFOlpImeMenu,

DWORDdwSize

四.ime的版本信息(与普通DLL的区别)

VS_VERSION_INFOVERSIONINFO代表字符含义

FILEVERSION4,0,0,950//4.00.95095版

PRODUCTVERSION4,0,0,950//4.00.95095版

FILEFLAGSMASK0x3fL

FILEFLAGS0xaL

FILEOS0x10004L//VOS_DOS_WINDOWS32WIN32软件,可在DOS下运行

FILETYPE0x3L//VFT_DRV驱动程序

FILESUBTYPE0xbL//VFT2_DRV_INPUTMETHOD输入法驱动程序

BEGIN

BLOCK"StringFileInfo"

BEGIN

BLOCK"080403a8"

BEGIN

VALUE"Comments","\0"

VALUE"CompanyName","唐码软件开发工作室\0"

VALUE"FileDescription","唐码输入法版本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系统提供的ime管理函数

  上一章,我们介绍了ime文件中必须设计的函数,这些函数要靠我们自己来设计。

要完成这些函数的设计,需用到windows系统提供的管理函数(InputMethodManager,简称IMM)。

IMM函数可以被IME函数使用,也可用于应用软件直接管理IME。

相关术语:

(1)inputmethodcontext简称IMC--输入法相关部分,在这里解释为:

相关连的应用程序(进程)

(2)componentoftheinputcontext简称IMCC--IMC的部件,是INPUTCONTEXT结构的成员。

一、IME中使用的IMM函数清单

ImmGetCompositionWindow//取编码窗口信息

ImmSetCompositionWindow//设置编码窗口信息

ImmGetCandidateWindow//取选择窗口信息

ImmSetCandidateWindow//设置选择窗口信息

ImmGetCompositionString//取编码窗口的某一信息

ImmSetCompositionString//设置编码窗口的某一信息

ImmGetCompositionFont//取编码字体

ImmSetCompositionFont//设置编码字体

ImmGetNumCandidateList//取选择区中编码数

ImmGetCandidateList//取选择区中编码

ImmGetGuideLine

ImmGetConversionStatus//取当前输入法的状态(ACSII,SHAPE,FULL等)

ImmGetConversionList//重新获得选择区转换表

ImmGetOpenStatus//取输入法打开属性

ImmSetConversionStatus//设置输入法状态

ImmSetOpenStatus//设置输入法打开状态

ImmNotifyIME//通报IME,输入法状态被改变

ImmGenerateMessage//将我们的汉字串法发送到与当前输入法相关联的应用软件中

ImmRequestMessage//向应用程序发送WM_IME_REQUEST

ImmLockIMC//获取当前IMC的INPUTCONTEXT结构信息,增加IMC计数器

ImmUnlockIMC//释放IMC计数器

ImmGetIMCLockCount//取计数器值

ImmCreateIMCC//创建INPUTCONTEXT结构的一个成员

ImmDestroyIMCC//删除IMC成员缓冲区

ImmLockIMCC//取IMCC缓冲地址,同时使IMCC的计数器值增加

ImmUnlockIMCC//递减IMCC计数器

ImmReSizeIMCC//重新设置IMC的成员的缓冲区大小

ImmGetIMCCSize//取IMC成员的缓冲区大小

ImmGetIMCCLockCount//返回IMC计数器值

ImmGetHotKey//取输入法状态键,该函数供控制面板使用

ImmSetHotKey//设置输入法的热键

ImmCreateSoftKeyboard//产生一个软键盘

ImmDestroySoftKeyboard//销毁软键盘

ImmShowSoftKeyboard//显示或隐藏软键盘

二、IMM函数使用格式说明

1、BOOLWINAPIImmGenerateMessage(//将我们的汉字串法发送到与当前输入法相关联的应用软件中

HIMChIMC//与当前输入法相关联的应用软件的句柄,

//该结构的hMsgBuf项即为汉字串消息

成功为TRUE,否则为FALSE

2、LRESULTWINAPIImmRequestMessage(//向应用程序发送WM_IME_REQUEST

//只是用于w98及w2000

HIMChIMC,//与当前输入法相关联的应用软件的句柄

WPARAMwParam,//与WM_IME_REQUEST相关的wP

LPARAMlParam//与WM_IME_REQUEST相关的LP

//=IMR_COMPOSITIONWINOW

//=IMR_CANDIDATEWINDOW

//=IMR_COMPOSITIONFONT

//=IMR_RECONVERTSTRING

//=IMR_CONFIRMRECONVERTSTRING

//=IMR_QUERYCHARPOSITION

//=IMR_DOCUMENTFEED

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

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2