如何在父窗口之后请求键盘钩子来处理消息

时间:2015-11-26 08:01:44

标签: c# winapi keyboard-hook mousekeyhook

标题说明了一切。在父窗口处理后,如何让我的键盘钩子处理传入的键盘消息?阅读docs我发现有一个名为WH_CALLWNDPROCRET的值正是这样做的,但是我需要在那里指定WH_KEYBOARD(当然要使它成为键盘钩子),并且值不是& #39; t似乎有点旗帜,所以我无法将两者结合起来。

背景:我正在为Word 2013编写一个加载项,它需要监视某些键并仅采取适当的操作 Word完成处理后的那些键。我正在使用globalmousekeyhook项目进行挂钩。

1 个答案:

答案 0 :(得分:0)

您所指的库正在订阅以下四个钩子:

  • WH_KEYBOARD_LL
  • WH_KEYBOARD
  • WH_MOUSE_LL
  • WH_MOUSE

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

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

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

为了回答你的问题,图书馆globalmousekeyhook不能订阅除上述4之外的其他任何钩子。

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

  • 您可以重复使用代码来安装挂钩。
  • 回调的签名当然会有所不同。
  • 然后你会得到所有的消息。
  • 仅过滤您感兴趣的邮件,例如: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
  • 解释随消息一起提供的数据。此外,您还可以重用库中的一些代码。

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