在 Windows Vista/7 中重定向应用程序的图形输出(使用 DWM)

Posted

技术标签:

【中文标题】在 Windows Vista/7 中重定向应用程序的图形输出(使用 DWM)【英文标题】:Redirect application's graphical output in Windows Vista/7 (with DWM) 【发布时间】:2010-06-07 09:38:38 【问题描述】:

我想创建一个桌面管理器,它获取所有正在运行的应用程序的信息,包括状态和屏幕截图,以便在我的虚拟空间(可能是 3D)中显示和操作它们。它可以被认为是 Windows 本身之上的另一层抽象。

因为许多原生 Windows Vista/7 功能(例如 Flip 3D 和实时缩略图)能够实时显示每个窗口的活动,例如视频一直在任务栏的缩略图中播放,我认为 DWM 允许应用程序将其输出重定向到其他地方,或者某些特殊进程能够收集其他应用程序的图形输出(可能仅限子进程)。 Microsoft 是否为此发布了一组公共 API?如果不能,技术上可行吗?如果我将范围限制为仅使用 WPF 的 .NET 应用程序会更容易吗?

【问题讨论】:

【参考方案1】:

您可以致电DwmRegisterThumbnail,DWM 将在您的窗口内绘制实时缩略图。

我认为没有受支持的方式来获取这些数据并自己操作它,但是那里有一些黑客,但我自己从未使用过它们。

【讨论】:

这适用于缩略图。但是仍然存在 Flip3D (Win+Tab) 或 Switcher (insentient.net) 如何绘制窗口内容的问题 这有点晚了,但万一有人仍然感兴趣 - msdn.microsoft.com/en-us/library/aa969541(v=vs.85).aspx 上有关 DWM 缩略图的 MSDN 文章指出,这些缩略图不能用于获得像 Flip3D 这样的效果。顺便说一句,我找到了一个 DLL dwmredir.dll 并查看了它的导出函数,我认为 dwmredir.dll 部分负责将窗口绘图重定向到内部缓冲区。

以上是关于在 Windows Vista/7 中重定向应用程序的图形输出(使用 DWM)的主要内容,如果未能解决你的问题,请参考以下文章

在win32中重定向标准输出不会重定向标准输出

如何在 C 程序中重定向标准输入(在 Windows 下)

在通配符 vhost apache (xampp) 设置中重定向子子域

在闪亮的应用程序中重定向

如何使用 Delphi 在控制台应用程序中激活玻璃效果(Windows Vista/7)

如何在 Nuxt Vue 应用程序中重定向