18

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

如果你不处理它,当你激活 IME 时会出现一个浮动窗口(例如激活日语书写)。我找到了需要处理的消息,但我不知道如何将我捕获的密钥发送到 IME 以及何时获得有效的转换字符。

4

2 回答 2

28

我是 Microsoft SDE,曾经维护(Windows 和 Office)韩语 IME 一段时间...

不幸的是,非 Microsoft 站点提供了最好的 IME API 文档:


这是微软官方文档:输入法管理器(MSDN)

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

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

这是 TSF 的官方 Microsoft 文档:Text Services Framework (MSDN)

您可能会发现 TSF 的一项有用功能是抑制 IME 呈现的能力(例如,需要自己呈现 IME 的全屏游戏)。只需告诉 TSF 你的应用程序将呈现 IME GUI,然后实现一个空的呈现方法:UILess Mode Overview (MSDN)

于 2009-08-08T21:54:29.553 回答
0

我认为您不想阻止显示 IME。除了测试之外,我从未使用过其他方法,但据我了解,IME 是使用英文键盘输入非英文字符的预期/默认方式。

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

于 2009-01-11T23:55:14.073 回答