gpt4 book ai didi

windows - 在我的应用程序激活之前检测哪个窗口处于事件状态

转载 作者:可可西里 更新时间:2023-11-01 13:33:05 24 4
gpt4 key购买 nike

在 Delphi XE 中,我尝试使用 GetForegroundWindow 来检测在我的应用程序被激活之前立即处于事件状态的窗口。 “Activated”表示应用程序可能已经从图标状态恢复,或者通过 alt+tab 切换到,或者通过激活热键等方式调出。

问题是所有可用的应用程序事件(OnActivate、OnRestore)都来得太迟,以至于 GetForegroundWindow 返回我自己的窗体句柄。主窗体的事件就更没用了。在主窗体中处理 WM_ACTIVATEAPP 也发生得太晚了。

一种方法是在我的应用程序未激活时继续检查计时器上的事件窗口,但这似乎相当浪费。更好的解决方案是子类化 TApplication.WndProc 并在处理 WM_ACTIVATEAPP 之前做我的事情,但我认为 TApplication 不能被子类化。

有没有更好的办法?

最佳答案

当您的应用程序激活时,它会成为最顶层的窗口。 IOW,它跳到顶部 Z 顺序位置。

有了这个,之前的最顶层窗口被降级到“刚好在新最顶层窗口下方”的位置。 IOW,它成为 Z 顺序位置的第二位。

调用 GetNextWindow并将表单的句柄传递给它,GW_HWNDNEXT 可能会为您提供所需的结果。

关于windows - 在我的应用程序激活之前检测哪个窗口处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com