32位输入法向64位移植的问题
我有一个32位的输入法,安装在win7 64位系统下,发现只能用于32位应用程序。
于是想把32位输入法移植到64位上,然后生成两个同名输入法,一个是32位的,一个是64位的,32位的放在c:\windows\syswow64\下,64位的放在c:\windows\system32下。然后当你打开的是32位程序,系统就自动选32位的输入法,你打开的是64位程序,系统会自动选择64位的输入法。
我有一些疑问,就是两个输入法分别对应32位程序和64位程序,这个我知道,但是安装程序应该是32位的还是64位的呢?而且安装的时候,需要注册,注册是用ImmInstallIME这个函数来注册的。那么安装程序应该是32位还是64位?用ImmInstallIME注册的时候,里面要填你的ime文件位置,这时填的是32位的ime文件的位置?还是64位的ime文件的位置?
我现在用的安装程序是32位的,注册的时候,填的是这个文件c:\windows\system32\zywb.ime,不过这个路径会不会被自动改成c:\windows\syswow64\zywb.ime?
反正我是这样安装了,最后把64位的输入法和32位的输入法分别放到那两个目录中,然后发现32位的输入法工作正常,就是打开32位程序,选择该输入法,可以正常工作。但是打开64位程序,选择该输入法,却工作不正常。
我于是调试,调试的是64位的输入法,在里面加入一条MessageBox语句,我发现:当你按ctrl +F5 执行的时候(这时当然会启动它的宿主——应用程序),这时,那条MessageBox语句没有被执行,说明它嵌入的是32位的输入法(真奇怪,64位的应用程序竟然也能使用32位的输入法),但是你按F5调试的时候,这时那条MessageBox会被执行,说明它使用的是真正的64位输入法,此时工作不正常。
不正常的表现在于:当ImeToAsciiEx函数最后发送消息时,我也和32位一样,在消息缓冲区里填写好,并返回消息的个数。但是UI窗口却收不到。所以候选窗口总是显示不出来。但是,当我把应用程序窗口最小化,再还原时,由于UI窗口能收到一个WM_IME_SETCONTEXT消息,这个消息会显示窗口,我发现,应用程序窗口最小化再还原以后,输入法的候选窗口显示出来了,显示的内容也正确。也就是说:其他一切功能正常。就是在ImeToAsciiEx填写的消息,UI窗口收不到。
请问是怎么回事?