使用全局钩子捕获IME消息

问题描述 投票:0回答:1

我目前正在开发一个VSTO Word加载项程序。我必须捕获IME消息以监视输入状态。我试图在这里捕获两条消息:

1,IMC_OPENSTATUS WINDOW(当候选栏打开时)2,IMC_CLOSESTATUS WINDOW(候选栏正在关闭时)。

以下是我正在使用的代码。它基本上适用于任何应用程序(如winform,wpf或notepad ++,因为我在这里使用全局钩子),但是,当我在Vsto Word加载项应用程序中使用此代码时,永远无法捕获IMC_CLOSESTATUSWINDOW消息。任何人有任何想法或任何线索将不胜感激。

int CandidateBarOpen = 0;
LRESULT CALLBACK HookshurufaProcess(int nCode, WPARAM wParam, LPARAM lParam)
{
  //win10
  PMSG pmsg = (PMSG)lParam;
  if (pmsg->message == WM_IME_NOTIFY){
    if (pmsg->wParam& IMC_CLOSESTATUSWINDOW){
        CandidateBarOpen = 1;
    }
    else if (pmsg->wParam& IMC_OPENSTATUSWINDOW){
        CandidateBarOpen = 0;
    }
  }
  return TRUE;
}
c++ vsto hook
1个回答
0
投票

微软的文档很明显(https://msdn.microsoft.com/en-us/library/windows/desktop/dd374139(v=vs.85).aspx)。你应该使用IMN_OPENSTATUSWINDOWIMN_CLOSESTATUSWINDOW参数与WM_IME_NOTIFY,而不是IMC_OPENSTATUSWINDOWIMC_CLOSESTATUSWINDOW

最后两个命令应该与WM_IME_CONTROL一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.