我见过这样的事情,我想知道这是否可能,比如说我运行我的应用程序,它会在它下面的任何地方显示渲染。
所以基本上,在没有窗口的屏幕上渲染。
可能还是谎言?
注意:想要在 Windows 和 C++ 中执行此操作。
可以使用您的应用程序在其他应用程序的窗口上绘图。一旦你找到了你想要的窗口,你就有了它的 HWND,然后你就可以使用它,就像它是你自己的窗口一样用于绘图。但是由于该窗口不知道您已经这样做了,因此当它尝试重绘自身时,它可能会弄乱您在其上绘制的任何内容。
有一些非常复杂的方法可以解决这个问题,其中一些涉及使用窗口“钩子”来拦截到该窗口的绘图消息,以便您知道它何时重绘,以便您也可以进行重绘。
另一种选择是在窗口上使用剪辑区域。这可以让你给你的窗户一个不寻常的形状,并让它后面的一切看起来仍然正确。
还有一些方法可以接管桌面背景窗口的绘制,您实际上可以运行一个在桌面背景上绘制动画和东西的应用程序(当桌面仍然可用时)。至少,这在 XP 上是可能的,不确定它是否在 Vista/Win7 中发生了变化。
不幸的是,所有这些选项都非常复杂,无法深入了解您正在尝试做什么。
您可以使用GetDesktopWindow()来获取HWND
桌面。但正如先前的答案所说(SoapBox),请小心,您可能会弄乱桌面,因为操作系统希望它拥有它。
几年前我写了一个开源项目,在桌面背景上实现这个。它被称为 Uberdash。如果您遵循窗口层次结构,则桌面只是一种“背景”容器中的窗口。然后是主容器和前容器。前端容器是窗口变成全屏或“始终在顶部”的方式。您也许可以使用 Aero 组合在前端容器中渲染带有 alpha 的窗口,但您需要将事件传递到较低的窗口。不会很漂亮
此外,在某些视频卡中还有一种称为覆盖/底层的技术。您曾经能够直接渲染到叠加层。您的 GPU 会直接应用它,而不会干扰主内存。因此,即使您进行了屏幕截图,您的叠加层/底层也不会出现在屏幕截图中。不幸的是,MS 在 Vista 中禁止了该技术......