我想在创建窗口之前使用SetWindowHookEx来捕获进程中的WM_CREATE(或HCBT_CREATEWND)消息。
使用hMod和dwThreadId可以定义钩子是否是系统范围的(通过将hMod设置为DLL的gInstance并将dwThreadId设置为0),也可以使用它来监视SINGLE线程在一个过程中(hMod = 0,dwThreadId = ThreadToMonitorId)。
但是,我想监视多个线程。可能吗?我想我可以简单地为多个线程调用SetWindowHookEx,但我不愿意,因为它会使事情变得更复杂。还有其他选择吗?
谢谢!
答案 0 :(得分:1)
您可以挂钩所有进程,只处理当前进程的WM_CREATE。在流程本身的上下文中调用钩子时,您只需将GetProcessId()
与所需的流程ID进行比较。
答案 1 :(得分:1)
创建多个拥有UI窗口的线程的进程非常非常。有时它是一个有意隐藏的互操作窗口,不太可能你想知道它。使用Spy ++验证您的假设,所有者线程ID显示在窗口属性Process选项卡中。
如果它有多个线程创建你想知道的窗口,那么你将要设置单独的钩子。