SetWindowsHookEx进程范围而不是系统范围

时间:2010-12-05 19:07:46

标签: c++ windows winapi

我想在创建窗口之前使用SetWindowHookEx来捕获进程中的WM_CREATE(或HCBT_CREATEWND)消息。

使用hMod和dwThreadId可以定义钩子是否是系统范围的(通过将hMod设置为DLL的gInstance并将dwThreadId设置为0),也可以使用它来监视SINGLE线程在一个过程中(hMod = 0,dwThreadId = ThreadToMonitorId)。

但是,我想监视多个线程。可能吗?我想我可以简单地为多个线程调用SetWindowHookEx,但我不愿意,因为它会使事情变得更复杂。还有其他选择吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以挂钩所有进程,只处理当前进程的WM_CREATE。在流程本身的上下文中调用钩子时,您只需将GetProcessId()与所需的流程ID进行比较。

答案 1 :(得分:1)

创建多个拥有UI窗口的线程的进程非常非常。有时它是一个有意隐藏的互操作窗口,不太可能你想知道它。使用Spy ++验证您的假设,所有者线程ID显示在窗口属性Process选项卡中。

如果它有多个线程创建你想知道的窗口,那么你将要设置单独的钩子。

相关问题