检测Windows动画设置

时间:2014-04-13 16:02:22

标签: windows winapi animation screenshot

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

事实证明,顶级窗口的第一个外观默认是动画的 - 它会淡入并扩展到它的实际大小 - 至少在Windows 7上。动画期间拍摄的屏幕截图要么缺少窗口框架或者框架按比例缩小并部分透明。

Screenshot of a Hello-World app as the top-level window appearance animation is in progress

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

我可以通过选中“轻松访问中心”控制面板中的“关闭所有不必要的动画”复选框来避免此问题,这似乎禁用了此动画。我认为这可能对应于通过SystemParametersInfo以编程方式访问的设置(或设置)。如果我可以检查动画何时启用,我只能在需要时添加延迟。我还可以考虑在测试期间禁用动画,然后在之后恢复用户的选择。

但我似乎无法找到与此特定动画相对应的SPI设置。有SPI_GETANIMATION,表示是否启用了最小化和恢复动画。但是,该设置与顶级窗口外观动画的设置无关。

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

1 个答案:

答案 0 :(得分:0)

答案似乎是"没有。"

David Heffernan成功识别出这是桌面窗口管理器转换设置。不幸的是,似乎没有读取这个设置的API。您可以DwmSetWindowAttributeDWMWA_TRANSITIONS_FORCEDISABLED一起使用来更改它,但它是全局设置,因此不可取。同样,动画的持续时间也不会曝光。

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