浅谈输入法编程

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

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

BOOL WINAPI ImeInquire(LPIMEINFO
lpIMEInfo,LPTSTR lpszUIClass,LPCTSTR lpszOption)
{
  lpIMEInfo->dwPrivateDataSize = sizeof(CONTEXTPRIV);//系统根据它为INPUTCONTEXT.hPrivate分配空间
  lpIMEInfo->fdwProperty = IME_PROP_KBD_CHAR_FIRST |
#ifdef _UNICODE
  IME_PROP_UNICODE |
#endif
  IME_PROP_SPECIAL_UI |
  IME_PROP_END_UNLOAD ;
  lpIMEInfo->fdwConversionCaps = IME_CMODE_FULLSHAPE |
  IME_CMODE_NATIVE;
  lpIMEInfo->fdwSentenceCaps = IME_SMODE_NONE;
  lpIMEInfo->fdwUICaps = UI_CAP_2700;
  lpIMEInfo->fdwSCSCaps = 0;
  lpIMEInfo->fdwSelectCaps = SELECT_CAP_CONVERSION;
  _tcscpy(lpszUIClass,CLSNAME_UI);
  return TRUE;
}

  lpIMEInfo->fdwProperty告诉Windows系统您编写的输入法的一些特征,注意一下IME_PROP_END_UNLOAD这个标志,有了它您编写的输入法会随着启动您的输入法的应用程序(如NotePad)的退出而退出,否则它将长驻于系统中,这也是为什么很多输入法在升级安装时需要首先重新启动电脑的原因。

  在这个接口中还有一点需要特别注意,那就是lpIMEInfo->dwPrivateDataSize,至少我是经过很多次测试才基本证实Windows根据该值为INPUTCONTEXT.hPrivate分配空间。此外如果您修改了这个接口,按照我个人的经验是需要重新调用ImmInstallIME来安装。

  在安装完成后,在输入法列表中应该已经有了您自己的输入法。点击调试,由于它是一个DLL,您需要先选择一个宿主程序,一般选择“记事本”,以调试方式启动“记事本”后,在这个“记事本”中打开您的输入法,您就可以在源代码中设置断点了。需要说明的是,VC6.0调试DLL不太好用,首先需要打上SP5或者SP6,这样也不能够在DLL启动的时候就设置断点,推荐使用.net来调试。

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

正在加载评论...