你如何使用IME?

我想做一个处理用户input的控件,所以我希望能够处理不同的键盘,其中一种方法是使用IME。

如果您没有处理它,那么在IME处于活动状态时会出现一个浮动窗口(例如日语写入活动)。 我发现需要照顾的消息,但我不知道如何发送我陷入IME的密钥,什么时候我得到一个有效的转换字符。

我是一个微软的SDE,用于维护(Windows和Office)韩国IME一段时间…

不幸的是,最好的IME API文档是由非微软网站提供的:

  • 来自Google Chrome浏览器的IME编程示例非常好的评论代码!)
    • ime_input.h
    • ime_input.cc
  • 用于IME开发的Win32多语言IME概述
  • Win32多语言输入法应用程序编程接口
    (对于微软来说,后两者曾经是Windows Driver Development Kit的一部分)

这里是官方的Microsoft文档: 输入法管理器(MSDN)

还有一个基于文本服务框架(TSF)的更先进的IME,Microsoft希望您使用它,但是它更加复杂,旧的API模拟得相当好。 如果您不需要任何高级功能(如通过平板电脑/语音识别/发烧友IME /等输入),那么使用旧的API就足够了。

关于文本服务框架的最佳文档是由另一个微软开发人员编写的TSF感知博客 。 如果你走这条路,埃里克·布朗甚至可以亲自回答你的问题。

以下是TSF的正式Microsoft文档: 文本服务框架(MSDN)

您可能会发现TSF的一个特性是能够抑制IME的渲染(例如需要渲染IME的全屏幕游戏)。 只需告诉TSF,您的应用程序将呈现IME GUI,然后实现一个空的呈现方法: UILess模式概述(MSDN)

我不认为你想压制IME显示。 我从来没有使用过除测试之外的其他东西,但是我的理解是IME是使用英文键盘输入非英文字符的预期/默认方式。

如果你正在编写一个控件,并且想要完全支持IME,我认为你有两个选择是响应各种Windows消息(如WM_IME_START_COMPOSITION,WM_IME_COMPOSITION等)或使用文本服务框架(TSF)。 我的理解是TSF是未来,而在Vista和Windows 7中,所有的IME代码都是基于TSF的,Windows消息仍然存在,以便与旧程序兼容。