Windows桌面管理器覆盖

时间:2015-02-12 17:14:29

标签: windows-8 overlay directx-11 leap-motion

我喜欢使用以下属性进行叠加:

  1. 至少应在Windows 8.1
  2. 上运行
  3. 应该在所有内容上,如鼠标光标
  4. 应该包含已经在背景上的像素,如模糊滤镜
  5. 没有闪烁
  6. 每一点的详情:

    1)我假设已激活WDM并使用DirectX 11.2。当然,将它用于其他Windows版本会很好,但这没有优先权。

    2)问题在于,只需使用WS_EX_TOPMOST,应用程序中的菜单就在我的叠加层上。在我的情况下,这真的很痛,因为我喜欢显示与光标具有相同属性的东西。想象一下,如果你打开一个菜单,突然隐藏了一个光标 - >不可接受的。

    3)我喜欢从Windows桌面读取像素,包括Windows应用的任何效果(如模糊),并将此信息用于我的过滤器。如果我添加我的叠加层,如2中所述,我应该能够在下一帧中获得新的无障碍背景副本,而不是读出我自己的叠加层。

    4)如果我直接在Windows桌面上写东西,它会在下一帧被Windows自动覆盖。这是不可接受的。

    这种应用的一个例子是放大镜,它具有我需要的所有属性。但是对于这种情况,Windows 8.1有一个API。相比之下,我喜欢编写一个程序,在桌面上显示一个手(由Leap Motion控制),这会影响Windows桌面,因此您几乎“感觉”如何将手移到桌面上。

    如果我为自己编写一个小型的DirectX和/或OpenGL应用程序,这一切都非常简单:

    • 将所有常规内容渲染为纹理
    • 将此纹理用于后期处理过滤器并在其上添加所有内容
    • 仅向后缓冲区渲染四元组

    但我喜欢在整个Windows桌面上这样做。

    我找到了许多不同的应用程序,但它们对我没用:

    • 声称位于顶部的应用程序仍位于菜单后面。这通常不会真正受到伤害,但对于类似游标的东西来说是不可接受的
    • 在所有正在运行的程序中将自己挂钩的屏幕捕获程序很不错,但我想把自己挂钩到WDM
    • 通常屏幕捕获程序不会在后台缓冲区中绘制任何内容,因此它们会为每一帧提供一个新的无障碍后台缓冲区

    我的问题可归结为:如何为Windows 8.1编写自己的放大镜。

    我担心我唯一认真的选择是将自己融入WDM,我试图避免这种情况。

    我很高兴听到任何想法如何实现这一点,或提示应用程序正在做我所描述的。

0 个答案:

没有答案