2010-10-03 54 views
8

我想弄清楚如何使用DWM將窗口的副本呈現到我自己想要的位置。我可以發現告訴DWM在某處顯示的唯一方法是使用縮略圖API。什麼是「創建像Flip3D應用程序」的API

但MSDN的DWM Thumbnail Overview他們專門提醒我關:

注意 DWM縮略圖不使開發人員能夠像 在Windows Vista中的Flip3D(WINKEY-TAB) 功能創建應用程序。縮略圖將 直接顯示在 二維的目標窗口中。

據我所知,該縮略API不能用於創建類似的Flip3D的應用程序,但他們不說哪個API 可以被用來創建一個類似Windows的應用程序的Flip3D。

那麼,什麼API 可以被用來創建應用程序,如Windows Vista Flip3D?


背景

在Windows桌面組合運行的應用程序繪製自己的窗口客戶區域的在自己的私人緩衝區。 (這與每個應用程序直接在屏幕上繪製的Windows的早期版本形成對比)。然後將該客戶區域圖像放置在一個框架(標題欄,最小化,最大化,還原按鈕等)中,然後繪製(即合成)到桌面上 - 以及所有其他打開的窗口:

alt text

由於此緩衝區是私有的,並且由於過去幾年的圖形卡在執行3D任務時變得功能強大,Windows可以開始執行一些整潔的技巧。其中之一是能夠操作客戶端窗口,對其進行縮放和透視更改。這允許實時的「縮略圖」API - Windows將在其中繪製縮略圖大小的窗口,並將其告訴給它。由於這一切都發生在硬件中,因此速度非常快。

其他能力是Flip3D(Win + Tab)。合成器可以執行窗口的三維定位。再次,因爲這全部都是用硬件完成的,所以速度非常快。

我已經找到了API來告訴桌面窗口監視器來抽我的應用「在這裏」的縮略圖:

//Register a thumbnail we want 
DwmRegisterThumbnail({in}hwndDestination, {in}hwndSource, out thumbnail); 

// Start displaying the thumbnail 
DwmUpdateThumbnailProperties({in}thumbnail, {in}thumbproperties); 

但我找不到API告訴DWM畫出我的全大小版本的窗口。


編輯You can't blame Microsoft for copy protection in Windows

  • 爲出廠應符合規規則遵守,並應設計和製造的方式許可的產品,這顯然是 設計,有效 挫敗試圖修改此類許可產品以擊敗HDCP規範和的內容保護要求合規性規則。

  • 許可產品應設計和製造的,這顯然是爲了有效地挫折嘗試 發現或顯示設備密鑰或其它高度機密 信息的方式

  • 許可的產品應至少使用遵循以下技術,以明確設計的方式來有效地對進行破壞嘗試 以擊敗HDCP的內容保護要求 規範和合規性規則

你必須責怪索尼。

+0

我也在尋找解決方案;不知何故,我懷疑這是微軟的存在。 – AniDev 2010-12-12 03:17:25

+0

我懷疑存在一個解決方案,以* *「挫敗」*許可協議要求的微軟用戶(http://en.wikipedia.org/wiki/High-bandwidth_Digital_Content_Protection) – 2010-12-13 18:43:54

+3

如果這是HDCP的副作用,那麼爲什麼OS X有'CGWindowListCreateImage'?我看不出有什麼關係。也許他們根本不想讓人們搞亂視窗系統。無論哪種情況,總有一種方法。只需要一些DWM逆向工程。 – 2012-12-15 22:28:16

回答

相關問題