身临其境的全屏模式的透明窗口

我正试图在身临其境的全屏模式下绘制另一个过程。 我知道这是可能的使用GDI,我有两个问题:

  1. 是否有可能使用顶级透明窗口? (在沉浸式过程之上)
  2. 有一个更高级别的API巫婆,我可以使用,而不是GDI?

谢谢 :)

在Windows中,创建全屏窗口有两种可能性:

  1. 全屏应用程序,具有独占的显示权限。
  2. 延伸到完整桌面分辨率的无边界窗口。

第一个选项允许您更改显示属性,如分辨率,位深度和刷新率,而第二个选项必须在这里使用相同的选项作为普通(窗口)的桌面应用程序。

只有当全屏应用程序使用选项2来实现时, 才能使用顶级窗口覆盖全屏窗口。然而,在这种情况下,任何能够创建透明顶级窗口的代码都可以(纯粹是WinAPI / GDI ,或者更复杂的东西,比如Qt)。

使用选项1,如描述所示,全屏应用程序具有对显示器的独占绘图权限。 尝试在其前面放置另一个窗口将使全屏应用程序最小化或将其强制为窗口模式。

在这种情况下,还有一些黑客如何仍然可以获得覆盖,但它们相当具有侵略性。 例如,使用基于D3D的全屏应用程序,您可以挂接到D3D的“ 呈现”例程,并让D3D在显示后台缓冲区之前绘制您的覆盖图。 这里重要的一点是,绘制覆盖图的代码是在全屏应用程序的进程内执行的,因为这是允许在该点上绘制到屏幕的唯一过程。

请注意,某些应用程序(尤其是受反作弊软件保护的视频游戏)如果以这种方式向代码注入代码,则不会太喜欢它。

请注意,Win API还为所谓的硬件覆盖提供了一个界面,允许在独占的全屏应用程序之上进行绘图。 不幸的是,这个机制在消费者硬件上并没有得到广泛的支持,并且可能无法工作,这取决于你试图运行哪个图形卡。