Использование глобальной ловушки для захвата сообщения IME

В настоящее время я занимаюсь разработкой программы VSTO Word Add-In. И я должен захватить сообщения IME, чтобы контролировать состояние ввода. Есть два сообщения, которые я пытаюсь уловить здесь:

1, IMC_OPENSTATUSWINDOW (когда бар кандидатов открывается) 2, IMC_CLOSESTATUSWINDOW (когда бар кандидатов закрывается).

Ниже приведен код, который я использую. Он отлично работает практически в любых приложениях (например, 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;
}

0

Решение

Документы Microsoft ясно об этом ( https://msdn.microsoft.com/en-us/library/windows/desktop/dd374139(v=vs.85).aspx ). Вы должны использоватьIMN_OPENSTATUSWINDOW а также IMN_CLOSESTATUSWINDOW параметры с WM_IME_NOTIFYне IMC_OPENSTATUSWINDOW а также IMC_CLOSESTATUSWINDOW,

Последние две команды должны использоваться с WM_IME_CONTROL,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]