В MS Word несколько раз срабатывает клавиатура
Это относится к вопросу, заданному в разделе "Обнаружение изменений текста в Word 2016 из надстройки VSTO".
В то время как ответ Дирка Воллмара работает, я заметил, что нажатие одной клавиши вызывает KeyboardHookCallBack 10-12 раз, и я не могу точно отследить последовательность нажатия клавиш.
Извините, если мой вопрос глуп, но есть ли способ убедиться, что KeyboardHookCallBack запускается только один раз для каждой клавиши? Я пытался это в течение некоторого времени без какой-либо удачи.
Буду признателен за любую помощь в этом вопросе.
1 ответ
Моим требованием было реализовать функцию автозаполнения с помощью intellisense в MS Word. Я решил, что каждый раз, когда пользователь нажимает клавишу пробела, я должен пытаться отследить, какие клавиши были нажаты пользователем с момента последнего нажатия клавиши пробела. Основываясь на решении " Обнаружение изменений текста в Word 2016 из надстройки VSTO", я не получал нажатие клавиш в правильной последовательности, и обратный вызов ловушки выполнялся несколько раз. Хотя я нашел грязный способ обойти проблему, решение не было полным доказательством. Потратив несколько дней, я нашел обходной путь и чувствую, что этот должен работать. Здесь это идет:
private IntPtr KeyboardHookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
string key = ((System.Windows.Forms.Keys)wParam).ToString();
if (key == "Space")
{
Word.Selection sel = Globals.ThisAddIn.Application.Selection;
Word.Range rng = sel.Range.Paragraphs[1].Range;
object unitWord = Word.WdUnits.wdWord;
object countN1 = -1;
sel.MoveStart(ref unitWord, ref countN1);
string userInput = sel.Words[1].Text;
sel.MoveRight(ref unitWord, ref missing, ref missing);
}
}
Надеюсь, что это помогает всем людям, борющимся с подобной проблемой.