在桌面背景上作为墙纸更换(Windows / C#)

我试图做一个应用程序,需要在桌面上绘制,在图标后面,所以它似乎取代桌面壁纸。 我已经find了一些解决scheme,但其中大多数并没有很好地工作(大量的闪烁)。 一个解决scheme似乎是我正在寻找 ,但我真的不明白。 我主要使用C#应用程序,使用更高级别的graphics库或Windows窗体,和一些C ++,但只在非Windows平台上。

如果有人能够为我“翻译”它或为我提供一个替代解决scheme,将不胜感激!

我从来没有找到我想要的解决方案,但这里是最好的(唯一的)选择:

  • 绘制到“SysListView32”窗口(ProgMan – > SHELLDLL_DefView – > SysListView32)。 这将在桌面图标后面绘制,但在使用动画时会闪烁。 如何: 链接 (你将不得不在.NET中使用互操作)。

  • 使用DirectDraw叠加。 您将桌面颜色设置为某种模糊的颜色,具有该颜色的所有内容都将替换为叠加层上的内容。 这在我的问题和VLC墙纸模式的例子中使用。 但是,这与Aero不兼容。 如何: 链接 (我猜你可以在.NET中使用托管的DirectX?)。

您可以在VLC媒体播放器代码中找到灵感。 有一个壁纸模式 ,可以做你想要的。

是的,互操作,看到这个线程。

顺便看到这个问题,我做了部分解决问题(但不是在某种程度上我可以给任何有用的代码),使一些很酷的游戏,虽然可能没有你想要的应用程序:

  • 将桌面背景设置恢复正​​常,并截取桌面
  • 将桌面背景设置为黑色并拍摄桌面的屏幕截图
  • 将桌面背景设置为白色并拍摄桌面的屏幕截图
  • 结合黑白版本制作一个蒙版和第一个截图,作为不同透明度的叠加设置像素值。

现在在你的表单上按顺序绘制如下:

  1. 绘制第一个截图
  2. 画你的表格的东西
  3. 绘制您创建的桌面覆盖图

这是我做了一个全屏幕的形式,但可以很容易地适应非全屏幕形式,我认为。 基本上你已经重新创建了桌面,但有能力做任何事情,包括一些很酷的游戏。 绘制速度和性能是令人满意的任何应用程序,但桌面交互是一个问题… :(这是一个坦克游戏使用的原则,除了我把背景设置为白色,使所有的白色背景也是透明的图片!

我的坦克游戏