You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测窗口最小化恢复时滑动动画的结束时刻

Windows最小化窗口恢复动画结束时刻检测方案

首先明确核心结论:
系统不存在专门在「窗口恢复滑动动画完全播放结束、窗口完整渲染显示到屏幕」时刻触发的专用窗口消息。你观察到的WM_ACTIVATE、携带SC_RESTORE参数的WM_SYSCOMMAND消息,确实是在点击任务栏触发恢复动作的瞬间就会发送,时间点远早于动画播放完成的时刻。

你可以通过以下几种可行方案检测动画结束时刻:

  • 调用DwmFlush接口做渲染同步
    当你收到SC_RESTORE消息后,调用DWM提供的DwmFlush()函数即可,该函数会阻塞调用线程,直到桌面窗口管理器把当前渲染队列中所有待提交的帧(包含整个窗口恢复动画的全部帧序列)都输出到屏幕上,函数返回的时间点和动画实际结束的时间点误差在1帧以内,是精度最高、实现成本最低的方案,使用时需要链接系统的dwmapi库。
  • 注册WinEvent钩子监听状态变化
    通过SetWinEventHook接口注册监听全局的EVENT_OBJECT_LOCATIONCHANGE事件,绑定到目标窗口的处理回调上:恢复动画播放过程中,DWM会持续触发该事件上报窗口显示状态的连续变化,当事件停止连续触发、同时通过IsIconic判断窗口已经退出最小化状态时,就代表动画已经播放完成。
  • 临时禁用系统过渡动画跳过等待
    如果你不需要保留系统默认的滑动恢复效果,可以在收到SC_RESTORE消息时,先通过DwmSetWindowAttribute给窗口设置DWMWA_TRANSITIONS_FORCEDISABLED属性临时禁用过渡动画,此时窗口恢复动作会瞬间完成,后续触发的WM_WINDOWPOSCHANGED、WM_PAINT消息触发时,窗口就已经完全显示在屏幕上,不需要额外等待动画周期。

注意:不要使用IsWindowVisible接口的返回值判断动画是否结束,该接口在恢复动作触发、动画刚开始播放时就会返回TRUE,完全无法区分动画进行中和动画完成的状态。

内容的提问来源于stack exchange,提问作者BigBang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:42:17