跟踪了一下:
切换到搜狗拼音时,WM_IME_CONTROL, IMC_GETCONVERSIONMODE 消息可正确返回 中(1)/英(0)
切换到微软拼音时,m._IME状态 始终为 0
看来是微软拼音未实现/不响应此消息
又:------------------------------------------------------
楼主代码中常数定义似乎和网上查到不同,我查到的是这样:
#DEFINE IMC_GETCONVERSIONMODE
0x0001
#DEFINE IMC_SETCONVERSIONMODE
0x0002
#DEFINE IMC_GETOPENSTATUS
0x0005
MSDN 上说这些常数在 imm.h 中,但我查了这个头文件,没有,几个以 IMC_ 开头的第一个就到 0x0007 了
我用网上查到的这个常数试了一下: SendMessage(lnHwnd, 0x283, 1, 0)
无论是切换到搜狗还微软拼音,均能正确返回中/英文状态: 0 或 1025,对咱们来说,基本可认为就是 英 or 中,也就是取状态没问题
实际的消息返回值是一个组合值,可用 vfp 的 bittest 函数测试这些位,例如,搜狗输入法
bit0 - 0(英文)1(非英文),bit3 - 是否全角,bit10 - 是否中文标点
至于微软拼音,惭愧,实在不会用,居然不知道如何输入全角符号和英文标点
,留给受虐狂用吧,咱是不考虑它了。要做成一个用来替代 IMESTATUS(无参数) 的函数,还需验证更多的常用输入法 。。。。
不过,如果试图用 SendMessage(lnHwnd, 0x283, 2, 0/1025) 来设置中英文状态,则微软拼音成功,搜狗失败
也许搜狗已抛弃 IME,只支持 TSF 了
这样一来,剩下的事情就是选取最合适的设置输入法方式了
楼主的模拟鼠标点击方式适用于搜狗输入法,估计稍加修改也可用于大多数流行的输入法
模拟快捷键的方式暂只测试了搜狗和微软拼音,都没问题
咱也不用其他输入法,只知道搜狗是用 shift 切换(很久以前用过的紫光好像也是),其他流行输入法有哪些快捷键就不清楚了
[此贴子已经被作者于2023-1-13 03:46编辑过]