2017-12-18 384 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