Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WM_ACTIVATEAPP消息句柄不是正在激活的窗口的句柄_.net_Winapi_Hook - Fatal编程技术网

.net WM_ACTIVATEAPP消息句柄不是正在激活的窗口的句柄

.net WM_ACTIVATEAPP消息句柄不是正在激活的窗口的句柄,.net,winapi,hook,.net,Winapi,Hook,我有多个具有根窗口句柄的桌面应用程序。我设置了挂钩,以便可以查看这些窗口的消息 例如,我设置了我的挂钩来查找消息WM_ACTIVATEAPP,以了解我关注的应用程序之一是否被激活 但是当我看到消息附带的句柄时,它不是窗口句柄,而是其他句柄,它不是应用程序的窗口树的一部分。请参见Spy++: 我曾假设消息句柄将匹配挂接的应用程序窗口句柄,但事实并非如此 我的问题是如何通过消息中传递的句柄以及windows和相关进程的知识来确定正在激活哪个窗口/应用程序?感谢大家的评论 似乎我可以简单地执行GetF

我有多个具有根窗口句柄的桌面应用程序。我设置了挂钩,以便可以查看这些窗口的消息

例如,我设置了我的挂钩来查找消息WM_ACTIVATEAPP,以了解我关注的应用程序之一是否被激活

但是当我看到消息附带的句柄时,它不是窗口句柄,而是其他句柄,它不是应用程序的窗口树的一部分。请参见Spy++:

我曾假设消息句柄将匹配挂接的应用程序窗口句柄,但事实并非如此


我的问题是如何通过消息中传递的句柄以及windows和相关进程的知识来确定正在激活哪个窗口/应用程序?

感谢大家的评论

似乎我可以简单地执行GetForeGroundIndow,将句柄返回到新激活的窗口

使用WM_ACTIVATEAPP,消息中的线程标识符似乎最终会返回到我的应用程序进行挂接,而不是激活的应用程序。所以这是一条死胡同


这似乎也适用于WM_激活。但是,这可能会影响我将应用程序窗口设置为应用程序的子窗口。不完全确定。

不确定我是否完全理解您所说的消息句柄。然而,根据WM_ACTIVATEAPP,它的参数中不包含窗口句柄。。。只有一个标志指示激活或非激活以及一个线程标识符。好的,那么我如何从线程句柄获取该线程的父应用程序?从VB论坛:您必须枚举所有顶级窗口,然后在每个窗口上获取WindowThreadProcessId,以查看哪些窗口与您的PID匹配。但还要记住,WM_ACTVATEAP由激活和停用应用程序发送/发送。将要激活/停用的车窗把手传递到。