2014-04-13 75 views
1

我正在開發一個程序,該程序在開發中的Windows應用程序上運行基本的煙霧測試和驗收測試。它的功能之一就是在應用程序首次出現時快照應用程序的頂層窗口。它通過啓動進程,等待輸入空閒,枚舉頂層窗口,然後獲取窗口DC和blitting來完成此操作。檢測Windows動畫設置

事實證明,頂層窗口的第一個外觀默認爲動畫 - 淡入並擴展爲其實際大小 - 至少在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

「DwmGetWindowAttribute」和「DWMWA_TRANSITIONS_FORCEDISABLED」你在找什麼? –

+0

這可能確實是我正在尋找的。我會盡快查看。 –

+0

@DavidHeffernan:DWMWA_TRANSITIONS_FORCEDISABLED是一個集合屬性。你不能查詢它(據我所知)。我可以用它來嘗試關閉有問題的窗口的轉換。不幸的是,當我找到窗戶時,已經太晚了 - 過渡已經生效。我想我必須堅持我的經驗延遲。謝謝。 –

回答

0

答案似乎是「不」。

David Heffernan成功確定了這是桌面窗口管理器轉換設置。不幸的是,似乎沒有一個API來讀取這個設置。您可以使用DwmSetWindowAttributeDWMWA_TRANSITIONS_FORCEDISABLED來更改它,但這是一個全局設置,因此不可取。同樣,動畫的持續時間也不會暴露。

如果有人發現相反的信息(或者如果在新版Windows中添加了API),請添加一個答案,我會接受它。