none
版主请进,关于输入法开发。 RRS feed

  • 问题

  • 微软终于给出了IME开发的指南http://msdn.microsoft.com/zh-cn/library/windows/apps/hh967425.aspx,虽然只是蜻蜓点水,但总比没有强了许多。可是看过之后有一些疑问,比如这一段:“如果你的 IME 需要在 Metro 风格应用与桌面应用之间提供不同的功能或 UI,请确保由 TSF 加载的 DLL 检查其要载入到哪种应用类型。在你的 IME 中调用 ITfThreadMgrEx::GetActiveFlags 方法并检查 TF_TMF_IMMERSIVEMODE 标志,这样你的 IME 可以根据结果而触发不同的应用程序逻辑。”

    看了一下这个函数,发现是“desktop apps only”的。不止是这一个,文中推荐的好几个函数都是“desktop apps only”的。于是我的问题来了:对于同一个DLL,要想让它在desktop和Windows Store apps环境下都能工作,该当如何处理?或者退一步,可以做两个分别对应不同环境的DLL,那么在Windows Store apps环境的DLL该如何安装呢?还有,Windows8的输入法切换机制,似乎并不支持分别挂接到不同的DLL上面;如果是从同一个DLL挂接再往下接续另外的DLL,那么又回到了上面提到的函数不工作的问题。

    另外,微软提供的那一点仅有的资料,对于开发一个Windows Store apps的IME而言是远远不够的,仅仅是提到了要点,缺乏大量的实现细节,而且这些要点现在看来似乎还有点自相矛盾,比如应该是专为平板开发的函数ITfFnGetPreferredTouchKeyboardLayout 居然也是desktop apps only的,这似乎有点说不过去。所以,强烈呼吁微软方面能提供IME开发的示例代码。我想,这也不是少数人的期望。

    以上问题,烦请版主解答并代为呼吁。祝节日愉快!

    2012年10月3日 1:54

全部回复

  • 你要知道,Windows Stoe App 是不能做成输入法的,输入法只是一个Desktop app ,所以他的API 都是Desktop only, 输入法只是可以提供给Win Store app使用,但他本身不是store app.

    所以,同时回答了你第二个问题,安装输入法并不是一个安装Win Store App的过程,

    在 Windows 8 中,无法在 Windows 应用商店中单独列出 IME。如果 IME 使用符合条件的 Metro 风格应用或使用 IME 的桌面应用打包 IME,则可以在 Windows 应用商店中列出 IME 以及应用。

    你应该仍旧依据之前的桌面输入法打包一样,但是如果你的输入法符合 Windows 8 应用认证要求 Desktop的附加要求等,可以将桌面应用放入应用市场。(Windows 应用市场不仅包含Win Store app, 他同时也会包含符合要求的Desktop app)

    至于例子,目前还没有提供,不过放心,应该会有相应示例的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月3日 3:21
    版主
  • 没想到版主在假期也值班啊,多谢这么快的回复!我继续请教问题。

    现在最直接的问题是,除了要满足开发指南列出的那些要求外,在Windows Store apps环境下工作的IME是否必须是“Windows应用商店应用程序”风格的DLL?

    我用VS2012新建了一个应用商店的DLL项目,但它只认识Windows Store apps下许可的API,那些desktop apps only的传统API通通无视,连编译都无法通过,后边的事情根本无从谈起。

    难道,以前那种“普通”的DLL(当然是在使用相应API的前提下)也能在Windows Store apps下工作?如果能,那么这种Windwos Store apps的DLL又是给谁准备的呢?

    另外,刚才谈到“输入法只是一个Desktop app”,那么ARM版的WindowsRT如何安装输入法?它也会有一个Desktop app环境吗?

    还有,我把在Desktop app 下工作正常的TSF输入法用于Metro环境,结果在调试的时候,发现它根本就没有进入DllMain()函数,显然,系统在切换的时候就进行了某种认证,结果它根本就没有挂接进去。IE10是唯一的例外,除了不显示提示行之外,输入法还能正常工作。对此,我怀疑IE10是一个披着Metro马甲的Desktop app。我现在想知道,在挂接输入法DLL之前,系统做了哪些工作?

    最后,我还想知道,输入法的例子大约什么时候能提供?哪怕是最简单的一个框架。但愿不会等到猴年马月。。Windows8马上就要上市了,一想到新平板上用不了输入法就着急啊!

    啰哩啰嗦提了一堆问题,因为手头的资料实在太过有限。现在版主是本人唯一的一根救命稻草,下面可能还会有一些延伸出来的问题要请教,先谢过!




    • 已编辑 laozuo 2012年10月3日 16:34
    2012年10月3日 15:27
  • 现在最直接的问题是,除了要满足开发指南列出的那些要求外,在Windows Store apps环境下工作的IME是否必须是“Windows应用商店应用程序”风格的DLL?

    不是,输入法不是Windows Store 应用商店应用程序。输入法由系统加载,与Win Store App运行机制没有直接联系。Windwos Store apps的DLL 是给开发Windwos Store app准备的,不是给输入法用的。

    那么ARM版的WindowsRT如何安装输入法?它也会有一个Desktop app环境吗?

    没有相关资料,目前不涉及到ARM环境,还需要等待。

    很遗憾,我这里的资料其实和你手上的是一样的,也没有更多的消息。只能等待。 至于例子,我倒可以有个途径你可以尝试,通过这个站点去请求:http://code.msdn.microsoft.com/site/requests 在最下面填写你的例子请求。

    对于将要推出的系统的输入法,目前微软已经集成了多种语言输入法,应该能够保证使用。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月8日 5:06
    版主
  • 我有一个现成的TSF输入法,可以在桌面环境正常工作。经过适当注册后,它可以在metro界面的IE10下工作,可以正常打字,但无法显示出来提示行。但在除IE10之外的其他Windows Store apps中完全不工作。

    我的理解是,在metro界面下,它需要新的、适应Windows Store apps规范的显示方式,原有的那种CreateWindow等函数已经不能工作,所以无法看到提示行。

    如果这样的理解是正确的,那么就带来了新的问题。虽然输入法DLL是传统的WIN32风格,但它里边必须包含可以在metro环境可以工作的显示等相关函数;而要把这些新的函数增加进来,VS2012环境中似乎必须设置“Windows扩展的/ZW选项”;而一旦如此设置,那么所有Desktop only的函数就失灵了,而要实现输入法必须用到这些。

    这似乎是一个“旧瓶装新酒”的问题。对于类似旧瓶旧酒的传统桌面应用,和新瓶新酒的Windows Store apps,在编程上都没有任何问题,而唯独像输入法这样新旧功能交叉的编程,不知道该如何下手。

    也许我理解错了,请版主指正。如果我理解是正确的,那么请版主告知,如何在传统的WIN32 DLL框架中加入Windows Store apps风格的函数。

    对于用户而言,能勉强打字和能以自己习惯的方式打字,这之间还是有很大区别的。微软不可能、也不必要包揽用户的输入法。我会尽快提交示例请求。

    再次感谢!

    2012年10月8日 8:57
  • 微软好像有一个TSF的完整的例子,能在metro中使用,包括IE10和非IE10。可以比对一下与你的程序的差别。

    http://code.msdn.microsoft.com/windowsdesktop/Input-Method-Editor-IME-b1610980/view/Discussions#content

    另外,CreateWindow是可以用的,至于怎么在METRO中显示窗口,微软的文档中应该描述清楚了。可以看看这个五笔输入法:http://chinput.com/thread-45-1-1.html  ,这 个软件很好的实现了win8的输入法。


    2012年10月29日 4:56