none
获取别的窗口的当前输入法状态 RRS feed

  • 问题

  • 通过HIMC hIMC = ImmGetContext(hFocusHwnd); 可以获取当前窗口的hIMC

    bool b = ImmGetConversionStatus(hIMC, &dwConv, &dwSent);
    if ((dwConv & IME_CMODE_LANGUAGE) != IME_CMODE_NATIVE)
    {
    //英文就进来
    //dwConv &= ~IME_CMODE_ALPHANUMERIC;
    OutputDebugString(L"xxxx-----这是英文状态\r\n");
    dwConv |= IME_CMODE_CHINESE;           //中文输入状态     
    }

    通过这断代码 可以知道当前输入法是中文状态 还是英文状态,

    但是 如果获取别的窗口的当前输入法 himc就返回失败了。

    如果换成HIMC hIMC = (HIMC)(LONG_PTR)GetWindowLongPtr(hFocusHwnd, IMMGWL_IMC);  不返回失败

    但是 下边判断中英文就失效了,如何解决?

    2017年1月18日 9:39

全部回复

  • Hi 岁月流年,

    感谢在MSDN论坛发帖。

    >>通过这断代码 可以知道当前输入法是中文状态 还是英文状态,

    但是 如果获取别的窗口的当前输入法 himc就返回失败了。

    ImmGetContext输入的窗口句柄必须是检索输入法的窗口。你可以尝试使用SetFocus函数,先将输入法绑定到其他的窗口。然后使用以上代码继续获取输入法状态。

    希望对你有所帮助。

    Best Regards,

    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年1月19日 1:38

  • 我注册了 全局快捷键 F1,我鼠标焦点在别的窗口上的时候,我按F1,执行的代码是:

    HWND hFocusHwnd = ::GetFocus();

    HIMC hIMC = ImmGetContext(hFocusHwnd);

    然后 ImmGetContext返回的还是空 ,GetLastError  是0  ,

    ImmGetContext 参数里面有hwnd了,为什么会失败呢?

    用了AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId(hWnd, NULL), TRUE); 还是失败

    2017年1月19日 8:57
  • 在你切换窗口之前,有没有在你的程序里调用ImmReleaseContext 释放键盘资源?

    Best Regards,

    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年1月23日 7:51