我在网上找过一段时间,但是各类资源太零散,但自己小白一位,尝试的时候跑不出来。尝试的时候用了ImmGetConversionStatus(),ImmGetConversionStatus(),FindWindow()等函数。利用VS工具中的Spy++得到窗口类名后但是无法通过FindWindow得到窗口的句柄;也不知道怎么通过尝试的时候用了ImmGetConversionStatus判断中英状态。
我在网上找过一段时间,但是各类资源太零散,但自己小白一位,尝试的时候跑不出来。尝试的时候用了ImmGetConversionStatus(),ImmGetConversionStatus(),FindWindow()等函数。利用VS工具中的Spy++得到窗口类名后但是无法通过FindWindow得到窗口的句柄;也不知道怎么通过尝试的时候用了ImmGetConversionStatus判断中英状态。
首先,据我所知,获得当前Windows输入法是一个未公开的 API 函数,也许通过Windows COM组件还有其它的方法,我不太清楚,但肯定不太简单。
看你的回复,你的目的并不是真的需要知道是什么输入法,只是需要在某个窗口输入的时候屏蔽输入法。这个问题就简单了:
禁用输入法:
HIMC hIMC = NULL;//hIMC 用于恢复时使用
hIMC = ImmAssociateContext(handle, NULL);//handle 为要禁用的窗口句柄
恢复禁用
ImmAssociateContext(handle, hIMC); //handle 为要启用的窗口句柄
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答931 阅读
1 回答1.1k 阅读
2 回答1.1k 阅读
这个需求的场景是在密码框输入,这样用户在输入密码时不用手动切换中英状态。最后勉强解决了这个问题,先拿到窗口的句柄hwnd,然后利用ImmGetOpenStatus判断中英状态,返回值为true说明是中文状态,返回值为false说明是英文状态,然后模拟键盘按下“shift”键实现中英切换。
不过这种方法存在一个问题,在window自带输入法“微软拼音”的时候不管是中英都会判断成中文状态。我期望的结果是像电脑版QQ登录界面那样,无论哪种输入法都只能乖乖输入英文,但是我太菜了做不到。