В 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);
    }
}

Надеюсь, что это помогает всем людям, борющимся с подобной проблемой.

Другие вопросы по тегам