2017-12-18 334 views
0

我目前正在开发VSTO Word Add-In程序。我必须捕获IME消息来监视输入状态。有两条消息我试图在这里捕获:使用全局钩子捕获IME消息

1,IMC_OPENSTATUSWINDOW(候选栏打开时)2,IMC_CLOSESTATUSWINDOW(当候选栏关闭时)。

以下是我正在使用的代码。它在基本上任何应用程序(如winform,wpf或notepad ++,因为我在这里使用全局钩子)都能正常工作,但是,当我在Vsto Word Add-in应用程序中使用此代码时,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; 
} 
+0

感谢您的注意,只是编辑为C++。 – Yao

回答

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一起使用。

+0

感谢您的回复,我已经尝试过IMN_OPENSTATUSWINDOW和IMN_CLOSESTATUSWINDOW,这两个消息可以通过一些输入法触发,但是,对于近年来开发的输入法,这些消息被放弃了,因为有一种新的输入方法开发机制自从Windows 10.并且我确信IMC_OPENSTATUSWINDOW和IMC_CLOSESTATUSWINDOW是我正在寻找的消息。唯一的问题是,这两个不能在Vsto Word Add-in中捕获,它可以很好地与其他应用程序一起使用。 – Yao