10

我试图弄清楚如何使用 DWM 将 Window 的副本渲染到我自己想要的位置。我能找到告诉 DWM 在某处渲染的唯一方法是使用缩略图 API。

但是 MSDN 的DWM Thumbnail Overview他们特别警告我:

注意 DWM 缩略图不允许开发人员创建类似于 Windows Vista Flip3D (WINKEY-TAB) 功能的应用程序。缩略图直接以二维形式呈现到目标窗口。

有人告诉我缩略图api不能用来创建像Flip3D这样的应用程序,但是他们没有说哪个api可以用来创建像Windows Flip3D这样的应用程序。

那么什么 API可以用来创建像 Windows Vista Flip3D 这样的应用程序呢?


背景

随着 Windows 桌面组合的运行,应用程序将它们的窗口客户区绘制到它们自己的私有缓冲区上。(这与每个应用程序直接在屏幕上绘制的以前版本的 Windows 形成对比)。然后将此客户区图像放置在一个框架中(标题栏、最小化、最大化、恢复按钮等),然后绘制(即合成)到桌面上 - 以及所有其他打开的窗口:

替代文字

因为这个缓冲区是私有的,而且由于过去几年显卡在执行 3D 任务方面变得强大,Windows 可以开始执行一些巧妙的技巧。其中之一是能够操纵客户端窗口,对其执行缩放和透视更改。这允许实时“缩略图”api - Windows 将在其中绘制您告诉它的窗口的缩略图大小的副本。由于这一切都发生在硬件中,因此速度非常快。

另一个功能是 Flip3D(Win+Tab)。合成器可以执行窗口的 3d 定位。同样,因为这一切都是在硬件中完成的,所以速度非常快。

我找到了告诉桌面窗口监视器在“此处”为我绘制应用程序缩略图的 API:

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

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

但是我找不到 API 来告诉 DWM 为我绘制全尺寸版本的窗口。


编辑你不能责怪微软在 Windows 中的复制保护存档

  • 出厂的许可产品应符合合规规则,并且其设计和制造方式应明确旨在有效 阻止修改此类许可产品以违反 HDCP 规范和合规规则的内容保护要求的尝试。

  • 许可产品的设计和制造方式应明确旨在有效阻止发现或泄露设备密钥或其他高度机密信息的尝试

  • 许可产品应至少使用以下技术,其设计方式明确旨在有效挫败违反HDCP 规范和合规规则的内容保护要求的企图

你必须责怪索尼。

4

1 回答 1

1

看看这个项目:https ://github.com/gratianlup/SmartFlip 。它使用 WPF 和缩略图 API。

于 2014-01-30T15:04:00.243 回答