检测Windows动画设置

检测Windows动画设置,windows,winapi,animation,screenshot,Windows,Winapi,Animation,Screenshot,我正在开发一个程序,在开发中的Windows应用程序上运行基本烟雾测试和验收测试。它所做的部分工作是在应用程序的顶级窗口首次出现时对其进行快照。它通过启动进程、等待空闲输入、枚举顶级窗口,然后获取窗口DC并从中进行blitting来实现这一点 事实证明,顶级窗口的第一次出现在默认情况下是动画的——它淡入并扩展到实际大小——至少在Windows7上是这样。动画过程中的截图要么缺少窗口帧,要么该帧缩小且部分透明 我可以通过在截图前添加延迟(例如,Sleep(250))来避免这个问题,但是我找不到动

我正在开发一个程序,在开发中的Windows应用程序上运行基本烟雾测试和验收测试。它所做的部分工作是在应用程序的顶级窗口首次出现时对其进行快照。它通过启动进程、等待空闲输入、枚举顶级窗口,然后获取窗口DC并从中进行blitting来实现这一点

事实证明,顶级窗口的第一次出现在默认情况下是动画的——它淡入并扩展到实际大小——至少在Windows7上是这样。动画过程中的截图要么缺少窗口帧,要么该帧缩小且部分透明

我可以通过在截图前添加延迟(例如,
Sleep(250)
)来避免这个问题,但是我找不到动画实际需要多长时间的任何信息。如果动画在未来版本的Windows上需要更长的时间(或者如果它是用户可调的),则此延迟可能不够长。如果动画被禁用,那么我只是在浪费时间。(该工具将用于运行许多测试,因此四分之一秒的延迟可能会累积起来。)

我可以通过选中Easy of Access Center控制面板中的“关闭所有不必要的动画”复选框来避免此问题,该复选框似乎禁用了此动画。我想这可能对应于通过编程方式可访问的设置。如果我可以检查动画何时启用,我可以仅在需要时添加延迟。我也可以考虑在测试期间禁用动画,然后再恢复用户的选择。

但我似乎找不到与此特定动画对应的SPI设置。还有SPI_GETANIMATION,它指示是否启用最小化和还原动画。但是,该设置独立于顶级窗口外观动画的设置

是否有API来检测是否启用顶级窗口外观动画?是否有一个设置可以控制它们的速度,以便我的代码知道延迟多长时间?我的程序是否可以观察到一个信号,以了解子进程的窗口何时完全绘制并完成动画制作?

答案似乎是“否”

David Heffernan成功识别出这是桌面窗口管理器转换设置。不幸的是,似乎没有API来读取此设置。您可以将
DwmSetWindowAttribute
DWMWA\u TRANSITIONS\u FORCEDISABLED
一起使用来更改它,但这是一个全局设置,因此不建议这样做。同样,动画的持续时间也不会公开


如果有人发现与此相反的信息(或者如果在较新版本的Windows中添加了API),请添加一个答案,我将接受。

DwmGetWindowAttribute
DWMWA\u TRANSITIONS\u FORCEDISABLED
您在寻找什么?这可能确实是我在寻找的。我很快就会查出来。@DavidHeffernan:DWMWA\u TRANSITIONS\u FORCEDISABLED是一个仅限集合的属性。(据我所知)你不能质疑它。我可以用它来关闭相关窗口的转换。不幸的是,当我找到窗口时,已经太晚了——转换已经生效了。我想我必须坚持我的经验延迟。谢谢