装了几种流行的输入法测试,基本可以说,用这些 IMC_* 消息非常的不靠谱!
我测试的结果是:搜狗、QQ、微软 的输入法,用下面代码判断【中/英】文输入状态没问题
程序代码:
Declare Long ImmGetDefaultIMEWnd in Imm32 Long
Declare Long SendMessage in win32api Long, long, long, long
m.hWnd = ImmGetDefaultIMEWnd(Application.hWnd)
m.nStatus = SendMessage(m.hWnd, 0x283, 1, 0)
? Bittest(status, 0)
但是,如果是其他流行的输入法,像极点五笔、万能五笔等便完全失效。准确判断都做不到,用什么方法切换输入状态也就不用考虑了。
所以,感觉还是用切换中英文 KeyboardLayout 可靠点
程序代码:
? '关闭输入法'
IMEstatus2(0)
Wait '按任意键切换回中文输入法 ...'
IMEstatus2(1)
Function IMEstatus2(onoff)
If Pcount() < 1
Return .f.
EndIf
m.onoff = Cast(m.onoff as I)
If m.onoff == 0
Declare Long LoadKeyboardLayout in win32api String, Long
LoadKeyboardLayout('00000409', 1)
Else
#IF .F. && 两种方法都行
Declare Long LoadKeyboardLayout in win32api String, Long
LoadKeyboardLayout('00000804', 1)
#ELSE && 我选择卸载 ENG
Declare Long UnloadKeyboardLayout in win32api Long
UnloadKeyboardLayout(0x00000409)
#ENDIF
EndIf
EndFunc