Перехват клавиатуры срабатывает несколько раз в MS Word

Это относится к вопросу, заданному в Обнаружение изменений текста в Word 2016 из надстройки VSTO

Хотя ответ, предоставленный Дирком Фоллмаром, работает, я заметил, что нажатие одной клавиши запускает KeyboardHookCallBack 10-12 раз, и я не могу точно зафиксировать последовательность нажатия клавиш.

Извините, если мой вопрос глупый, но есть ли способ убедиться, что KeyboardHookCallBack срабатывает только один раз для каждой клавиши? Я пробовал это в течение некоторого времени без везения.

Буду признателен за любую помощь в этом вопросе.


person Rohan    schedule 01.09.2016    source источник


Ответы (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);
    }
}

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

person Rohan    schedule 22.09.2016
comment
Я испытываю ту же проблему с обратным вызовом, который выполняется несколько раз. Как вы решили это? - person Selwyn; 17.04.2017