什么实际上处理Windows墙纸的绘图?

我正在尝试使用opengl / directx或GDI制作animation的Windows 7壁纸。 我研究了Windows桌面窗口是如何布置的,我想到了整个

“Progman” – >“SHELLDLL_DefView” – >“SysListView32”

层次结构。 我试图挂钩SysListView32的WndProc,并尝试使用注入的C#DLL消息,所以我可以防止桌面绘制墙纸,当我强迫它改变使用控制面板 – >个性化菜单。 这没有一个实际上阻止了壁纸的更新,所以我认为explorer.exe实际上并不处理绘制壁纸。

为了证实这一点,我杀了explorer.exe,并设置了一个小小的c#程序,将10秒定时器的壁纸更改为随机的。 正如我所料,壁纸不断变化,导致我相信explorer.exe实际上不处理壁纸的绘制!

不幸的是,这是我完全失去了。 我不知道还有什么是负责绘制壁纸,我怎么可以接pipe它的绘图,所以我可以处理绘图。 我试图谷歌这几天,现在几乎没有进展。 我希望这里有人能指引我走向正确的方向。

桌面(包括其上的位图)实际上是由窗口系统本身绘制的。 所以这基本上也是相当古老的。 所以根据自NT4以来发生的变化,我认为这幅画实际上是在win32k.sys中完成的。 该驱动程序被创build来replacewin32.dll,这将在用户模式下完成与上下文切换的所有事情。

这就是说,它符合什么erykson评论你的问题: win32k!xxxInternalPaintDesktop是坏人。

但是,应该可以获取桌面HWND(0 afaik)的DC并将其附加到您自己的绘图中。 不知道如果你可以把它变成一个DirectX的DC,但这是由你来尝试。

BTW。 可以重新父母并捕获外部窗口(HWND)和关联的设备上下文(DC)。 但是,您可能需要有特权或pipe理员。 (安全检查)

桌面窗口pipe理器负责绘制壁纸。 它被实现为Windows服务。