如何用C++代码判断当前输入法(Window)是中文还是英文,然后对其进行转换。

我在网上找过一段时间,但是各类资源太零散,但自己小白一位,尝试的时候跑不出来。尝试的时候用了ImmGetConversionStatus(),ImmGetConversionStatus(),FindWindow()等函数。利用VS工具中的Spy++得到窗口类名后但是无法通过FindWindow得到窗口的句柄;也不知道怎么通过尝试的时候用了ImmGetConversionStatus判断中英状态。

阅读 7.2k
2 个回答
HIMC himc = ImmGetContext(hwnd);
if (ImmGetOpenStatus(himc))
{
  keybd_event(16, 0, 0, 0);
  keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
}

这个需求的场景是在密码框输入,这样用户在输入密码时不用手动切换中英状态。最后勉强解决了这个问题,先拿到窗口的句柄hwnd,然后利用ImmGetOpenStatus判断中英状态,返回值为true说明是中文状态,返回值为false说明是英文状态,然后模拟键盘按下“shift”键实现中英切换。
不过这种方法存在一个问题,在window自带输入法“微软拼音”的时候不管是中英都会判断成中文状态。我期望的结果是像电脑版QQ登录界面那样,无论哪种输入法都只能乖乖输入英文,但是我太菜了做不到。

首先,据我所知,获得当前Windows输入法是一个未公开的 API 函数,也许通过Windows COM组件还有其它的方法,我不太清楚,但肯定不太简单。
看你的回复,你的目的并不是真的需要知道是什么输入法,只是需要在某个窗口输入的时候屏蔽输入法。这个问题就简单了:
禁用输入法:

HIMC hIMC = NULL;//hIMC 用于恢复时使用
hIMC = ImmAssociateContext(handle, NULL);//handle 为要禁用的窗口句柄

恢复禁用

ImmAssociateContext(handle, hIMC); //handle 为要启用的窗口句柄
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏