【问题标题】:When are the Windows hooks added to the hook chainWindows 钩子何时添加到钩子链中
【发布时间】:2014-12-12 13:00:28
【问题描述】:

我正在尝试向钩子链中添加一个 Windows 钩子,并想知道它是什么时候添加的?

我正在按此顺序执行操作:

  1. 我启动任何程序并将调试器附加到它,在 DllMain 上添加断点和我注入的代码的回调函数;
  2. 我注入了全局钩子;
  3. 我以编程方式切换窗口的可见性 - 这里我点击了 DllMain 函数;
  4. 我在将窗口设为前景窗口后立即在钩子回调上打断点。

有没有办法触发向窗口回调链添加钩子回调而不使窗口成为前台窗口?

谢谢!

【问题讨论】:

  • 您在问一个问题(“什么时候将一个挂钩安装到挂钩链中?”),但显然有兴趣找到另一个问题的答案(“系统何时加载包含挂钩过程的模块?”)。是哪一个?

标签: c++ windows winapi hook


【解决方案1】:

据我所知,在调用SetWindowsHookEx 期间,钩子被添加到钩子链中。 DLL 不一定要立即加载——操作系统决定何时加载。钩子本身显然只在调用钩子链时才被调用,这取决于钩子。如果你钩住了WH_CALLWNDPROC,而你的回调直到某个时候才被调用,这意味着没有任何消息可以钩住。因此,如果您只想拦截消息,则没有问题。如果您确实认为有问题,请提供更多信息。

【讨论】:

    【解决方案2】:

    其实是有一些触发因素的。

    如果你的钩子类型是WH_GETMESSAGE,你可以执行PostMessage(HWND_BROADCAST...调用来强制任何GUI进程加载带有钩子过程的dll。

    对于其他类型的钩子,你可以尝试一下。

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      相关资源
      最近更新 更多