【问题标题】:Keyboard hook fires multiple times in MS Word键盘钩子在 MS Word 中多次触发
【发布时间】:2016-09-01 06:40:27
【问题描述】:

这是参考Detecting text changes in Word 2016 from VSTO add-in中提出的问题

虽然 Dirk Vollmar 提供的答案有效,但我注意到按一个键会触发 KeyboardHookCallBack 10-12 次,我无法准确地捕捉到按键的顺序。

如果我的问题很愚蠢,请原谅我,但有没有办法确保每个键只触发一次 KeyboardHookCallBack?我已经尝试了一段时间了,但没有任何运气。

如果能在这件事上提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: ms-word vsto keyboard-hook


    【解决方案1】:

    我的要求是在 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);
        }
    }
    

    希望这可以帮助所有在类似问题上苦苦挣扎的人。

    【讨论】:

    • 我在多次执行挂钩回调时遇到了同样的问题。你是怎么解决这个问题的?
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 2014-07-29
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多