浅谈输入法编程

豆豆网   技术应用频道   2008年01月14日  【字号: 收藏本文

内容摘要:本文拟结合作者的亲身体验简要介绍一下在Windows环境下如何编写输入法程序。

  输入法上下文(HIMC):HIMC是什么?在输入法编程时必然要接触到输入法上下文这个术语,刚接触时听起来实在是半懂不懂。由于输入法是一个插件,它需要和调用它的应用程序通讯,在输入法中生成的编码及重码信息保存在哪里应用程序才能正确的读取呢?答案就在于输入法上下文。输入法上下文是由User.exe(一个系统进程)为应用程序分配的内存句柄,在应用程序中启动的输入法在这块内存中写入数据,User.exe再将数据传递到应用程序。

  UIWnd:在IME中需要导出一个接口,原型如LRESULT WINAPI UIWndProc(HWND hUIWnd, UINT message,WPARAM wParam, LPARAM lParam),hUIWnd是由User.exe传过来的窗口句柄,它是输入法中创建的窗口如编码窗口,重码窗口,状态栏窗口的宿主(Owner),初学输入法编程的人可能会问这个窗口显示在哪里呢?其实它并不是一个普通的窗口,它只是一个用来传递Windows消息的窗口(Message Only),在使用时,您不需要关心它在哪里,只需要使用它就好了。

  一个IME需要导出19个(Win98版本)接口,但是对于一个只需要实现一般意义的文字输入的软件,您只需要实现几个基本的接口就可以让输入法正常工作了。下面逐一介绍一下这几个接口。

/**********************************************************************/
/* ImeSelect() */
/* Return Value: */
/* TRUE - successful, FALSE - failure */
/**********************************************************************/
BOOL WINAPI ImeSelect(HIMC hIMC,BOOL fSelect)
在这个接口中,系统通知输入法当前是否打开了输入法输入。一般输入法启动时会调用一次,在一些软件(如EmEditor)中提供打开与关闭输入法的功能就是通过这个接口实现的。如果打开输入法,一般会在这个接口中做一些数据的初始化工作。/***********************************************************************/
/*系统调用这个接口来判断IME是否处理当前键盘输入 */
/*HIMC hIMC:输入上下文 */
/*UINT uKey:键值 */
/*LPARAM lKeyData: unknown */
/*CONST LPBYTE lpbKeyState:键盘状态,包含256键的状态 */
/*return : TRUE-IME处理,FALSE-系统处理 */
/*系统则调用ImeToAsciiEx,否则直接将键盘消息发到应用程序 */
/**********************************************************************/
BOOL WINAPI ImeProcessKey(HIMC hIMC,UINT uKey,LPARAM lKeyData,CONST LPBYTE lpbKeyState)

来源:启程软件    责编:豆豆技术应用

正在加载评论...