You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下ImmNotifyIME调用失败及候选框隐藏问题咨询

关于Windows 10 IMM API调用失败的问题

我在Windows 10上开发一款使用IME合成功能的程序,程序在特定线程中通过DefWindowProc处理所有WM_IME_消息,另一个线程负责检查IMM上下文。

输入法位置设置的代码差异

当我需要更改输入法位置时,以下代码可以正常工作:

HWND idefhwnd = fpImmGetDefaultIMEWnd (hwnd);
::SendMessageW (idefhwnd, WM_IME_CONTROL, IMC_SETCOMPOSITIONWINDOW,
        reinterpret_cast<LPARAM>(reinterpret_cast<void*>(&cpf)));

但以下代码执行失败:

HIMC hImc = fpImmGetContext (hwnd);
fpImmSetCompositionWindow (hImc, &cpf);
fpImmReleaseContext (hwnd, hImc);

核心疑问

我想了解导致fpImmNotifyIME调用失败的场景,以及是否有其他方法可以临时隐藏候选框。


补充详情

为兼容旧编译器,我通过动态加载Imm32.dll的方式调用函数:

hModImm32 = ::GetModuleHandleW (L"Imm32.dll");
fun = ::GetProcAddress (hModImm32, funcname);

部分IMM函数可正常工作,比如使用ImmAssociateContextEx临时禁用IME的功能就运行正常:

using iace_t = decltype(ImmAssociateContextEx);
iace_t* fpImmAssociateContextEx = mcl_get_immfunc<iace_t>("ImmAssociateContextEx");
if (!fpImmAssociateContextEx) return false;

fpImmAssociateContextEx (hwnd, NULL, IACE_CHILDREN);

但我发现该方法无法在输入过程中关闭候选框,因此尝试在调用fpImmAssociateContextEx前通过以下代码通知输入法关闭窗口:

HIMC himc = fpImmGetContext (hwnd); // himc != nullptr
fpImmNotifyIME ( himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0 );
fpImmNotifyIME ( himc, NI_CLOSECANDIDATE, 0, 0 );

所有fpImmNotifyIME调用均返回FALSE且无任何效果。

内容的提问来源于stack exchange,提问作者依奈ちゃん

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:35:19