如何使用 DWMWA_FREEZE_REPRESENTATION 冻结实时缩略图?

How do I freeze a live thumbnail using DWMWA_FREEZE_REPRESENTATION?

我成功地将另一个 windows 的内容(现在在我的测试用例中,记事本)投影到我自己的 window 中。效果很好。

我没能做到的是冻结它,正如 API 使用 DwmSetWindowAttribute (here) with the parameter DWMWA_FREEZE_REPRESENTATION (here) 提供的那样,根据互联网等于 15。

dwmSetWindowAttribute(MyWindow,15,@Value,1)

我几乎尝试了所有变体。发送 1 个字节,发送 4 个字节,值 1、0、"maxdword" 等等。return 值始终是 -2147024809,除非我弄错了 - 意味着 "Invalid Parameter".

由于 BitBlt 的速度较慢,无法通过获取我正在投影的 window 的 DC 来使用变通方法。在寻找可合理快速实施的替代方案后,我偶然发现了 dwm 缩略图。

在互联网上搜索 DWMWA_FREEZE_REPRESENTATION 并没有给我任何有用的信息,就好像没有其他人尝试使用它一样。我想我的问题很快就会成为 google.

上的第一搜索结果

运行 Windows 10 月更新。

我怎样才能让它工作?

第三个和第四个参数实际上是BOOL*sizeof(BOOL),但第一个参数需要是一个UWP window。 DWMWA_FREEZE_REPRESENTATION 仅适用于文档中未提及的 UWP windows。