何时将Windows挂钩添加到挂钩链中

问题描述 投票:-1回答:2

我试图将一个Windows钩子添加到钩子链,并想知道它何时被添加?

我按此顺序执行操作:

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

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

谢谢!

c++ windows winapi hook
2个回答
1
投票

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


0
投票

实际上,有一些触发因素。

如果挂钩的类型是WH_GETMESSAGE,则可以执行PostMessage(HWND_BROADCAST...调用以强制任何GUI进程使用挂钩过程加载dll。

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

© www.soinside.com 2019 - 2024. All rights reserved.