加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 在我的应用程序激活之前检测哪些窗口处于活动状态

发布时间:2020-12-14 01:52:01 所属栏目:Windows 来源:网络整理
导读:在Delphi XE中,我尝试使用GetForegroundWindow来检测在应用程序激活之前立即激活的窗口. “已激活”表示应用程序可能已从标志状态恢复,或者已通过alt选项卡切换,或通过激活热键等启动. 问题是所有可用的应用程序事件(OnActivate,OnRestore)来得太晚,因此GetF
在Delphi XE中,我尝试使用GetForegroundWindow来检测在应用程序激活之前立即激活的窗口. “已激活”表示应用程序可能已从标志状态恢复,或者已通过alt选项卡切换,或通过激活热键等启动.

问题是所有可用的应用程序事件(OnActivate,OnRestore)来得太晚,因此GetForegroundWindow返回我自己的表单的句柄.主要形式的事件甚至没那么有用.在主窗体中处理WM_ACTIVATEAPP也发生得太晚了.

一种方法是在我的应用程序未激活时继续检查计时器上的活动窗口,但这似乎相当浪费.一个更好的解决方案是继承TApplication.WndProc并在处理WM_ACTIVATEAPP之前完成我的工作,但我不认为TApplication可以是子类.

有没有更好的办法?

解决方法

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

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

调用GetNextWindow并传递表单句柄和GW_HWNDNEXT可能会给你所需的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读