如何要求键盘挂钩在 parent window 之后处理消息

How to ask keyboard hook to process messages AFTER the parent window

标题说明了一切。在 parent window 处理完传入的键盘消息后,如何让我的键盘钩子处理这些消息?阅读 docs 我发现有一个名为 WH_CALLWNDPROCRET 的值正是这样做的,但我需要在那里指定 WH_KEYBOARD (当然要使其成为键盘挂钩),并且该值不好像有点flag,所以我不能把两者结合起来。

背景:我正在为Word 2013写一个add-in,它需要监控某些键并只在[=之后采取适当的行动22=] Word 已完成对这些键的处理。我正在使用 globalmousekeyhook 项目进行挂钩。

您所指的图书馆正在订阅以下四个挂钩:

  • WH_KEYBOARD_LL
  • WH_KEYBOARD
  • WH_MOUSE_LL
  • WH_MOUSE

当你订阅一个钩子时,你给了系统一个对你代码的回调,它将根据不同钩子类型的规则执行。此外,回调将传递给您的信息必须以不同的方式解释。这 4 个提供有关鼠标位置、击键等的信息。

您可以订阅许多不同类型的挂钩。参见:Hook Overview

你们所指的WH_CALLWNDPROCRET就是其中之一。它有不同的回调调用行为,并为您提供发送到 window 的所有消息。这些理论上可能包括数百种可能的消息中的任何一种,而不仅仅是键盘和鼠标消息。

为了回答您的问题,图书馆 globalmousekeyhook 无法订阅除上述 4 个之外的任何其他挂钩。

好消息是,您或许可以重用库中的代码来实现您自己的订阅。

  • 您可以重复使用代码来安装挂钩。
  • 您的回调签名当然会有所不同。
  • 然后您将收到所有消息。
  • 只过滤掉您感兴趣的消息,例如WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP.
  • 解释与消息一起传送的数据。您也可以在这里重用库中的一些代码。

结论 不,图书馆无法满足您的需求。 是的,您可能可以通过重用该库中的代码来实现这一点。