【问题标题】:calling the method pointed to by SetWindowsHookEx调用 SetWindowsHookEx 指向的方法
【发布时间】:2012-05-29 21:41:12
【问题描述】:
HHOOK WINAPI SetWindowsHookEx(
 __in  int idHook,
 __in  HOOKPROC lpfn,
 __in  HINSTANCE hMod,
 __in  DWORD dwThreadId
);

正如doc 所说,lpfn 是指向钩子过程的指针。让钩子程序是:

keyboardProcessing(.....) {
}

我如何调用这个钩子程序?即使我调用这个钩子程序,我将如何接收击键?

请解释一下SetWindowsHookEx是如何起作用的,它是如何调用程序员定义的实际钩子方法来处理按键的?

【问题讨论】:

  • 您不必调用该过程。 Windows 会调用它来通知您的应用。
  • @Adriano 你的意思是每当我按下这个键时,windows 会自动调用函数keyboardProcessing

标签: c++ c windows winapi hook


【解决方案1】:

SetWindowsHookEx 函数用于为某些 Windows 事件注册自定义处理程序。来自 MSDN:

将应用程序定义的钩子过程安装到钩子链中。您将安装一个挂钩程序来监视系统中某些类型的事件。这些事件要么与特定线程相关联,要么与调用线程所在的同一桌面中的所有线程相关联。

这意味着,对于选定的挂钩类型(例如键盘事件),Windows 将调用提供的过程 (lpfn) 来通知发生了该类型的事件。例如,您可以使用它从键盘获取所有事件,即使它们没有被定向到您的应用程序窗口(想象编写一个宏记录器)。

如何调用这个钩子程序?

您不必调用该过程,您将在对SetWindowsHookEx 的调用中提供其地址,然后 Windows 会在需要时为您调用它。

即使我调用这个钩子程序,我将如何接收击键?

如前所述,您不必调用它,如果您为WH_KEYBOARD 注册一个挂钩,那么 Windows 将为每个键盘事件调用该过程。不要忘记致电CallNextHookEx 在你的过程中,钩子是一个过程链,每个过程负责调用链中的下一个过程。最后在使用UnhookWindowsHookEx 退出应用程序之前释放钩子。

【讨论】:

猜你喜欢
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多