2016-09-01 3 views
1

Это ссылка на вопрос, заданный в Detecting text changes in Word 2016 from VSTO add-inклавиатуры крюк срабатывает несколько раз в MS Word

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

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

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

ответ

0

Моим требованием было реализовать функцию автозаполнения с intellisense в MS Word. Я решил, что каждый раз, когда пользователь нажимает пробел, я должен попытаться отследить, какие клавиши нажали пользователь, так как он последний раз ударил пробел. Основываясь на решении на Detecting text changes in Word 2016 from VSTO add-in, я не получал нажатия клавиш в правильной последовательности, и обратный вызов крючка выполнялся несколько раз. Хотя я нашел грязный способ обойти проблему, решение не было полным доказательством. Проведя несколько дней, я придумал обходной путь, и я чувствую, что он должен работать. Вот он:

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

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

+0

Я испытываю ту же проблему, что и повторный запуск hookcall. Как вы это решили? – Selwyn

Смежные вопросы