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

时间:2015-06-04 06:10:16

标签: c# windows opengl windows-7 drawing

我正在尝试一个项目,我可以使用opengl / directx或GDI为windows 7壁纸设置动画。我调查了Windows桌面窗口是如何布局的,我想出了整个

“Progman” - > “SHELLDLL_DefView” - > “SysListView32”

层次结构。 我尝试连接SysListView32的WndProc,并尝试使用注入的c#dll搞乱消息,这样我可以防止桌面在我使用控制面板强制更改时绘制壁纸 - >个性化菜单。这些都没有实际阻止壁纸更新,所以我认为explorer.exe实际上并不处理绘制壁纸。

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

不幸的是,这是我完全迷失的地方。我不知道还有什么负责绘制壁纸,以及我如何能够接管它的绘图以便我可以处理绘图。我已经尝试谷歌这几天了,几乎没有进展。我希望有人可以指导我朝着正确的方向前进。

2 个答案:

答案 0 :(得分:1)

桌面(包括其上的位图)实际上是由窗口系统本身绘制的。所以这基本上也是非常深刻和陈旧的。所以根据自NT4以来发生的变化,我想这幅画实际上是在win32k.sys中完成的。创建驱动程序是为了替换win32.dll,它将在用户模式下完成所有操作并进行上下文切换。

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

然而,应该可以获取桌面HWND的DC(0 afaik)并将其附加到您自己的图纸上。不确定您是否可以将其转换为DirectX DC,但这取决于您尝试。

顺便说一句。可以重新父和捕获外部窗口(HWND)和相关的设备上下文(DC)。但是,您可能需要特权或管理员。 (已检查安全性)

答案 1 :(得分:0)

桌面窗口管理器负责绘制壁纸。它是作为Windows服务实现的。