我正在尝试一个项目,我可以使用opengl / directx或GDI为windows 7壁纸设置动画。我调查了Windows桌面窗口是如何布局的,我想出了整个
“Progman” - > “SHELLDLL_DefView” - > “SysListView32”
层次结构。 我尝试连接SysListView32的WndProc,并尝试使用注入的c#dll搞乱消息,这样我可以防止桌面在我使用控制面板强制更改时绘制壁纸 - >个性化菜单。这些都没有实际阻止壁纸更新,所以我认为explorer.exe实际上并不处理绘制壁纸。
为了确认这一点,我杀了explorer.exe并设置了一个小的c#程序,它将10秒计时器上的壁纸改为随机的。正如我所料,壁纸不断变化,让我相信explorer.exe实际上并没有处理壁纸的绘制!
不幸的是,这是我完全迷失的地方。我不知道还有什么负责绘制壁纸,以及我如何能够接管它的绘图以便我可以处理绘图。我已经尝试谷歌这几天了,几乎没有进展。我希望有人可以指导我朝着正确的方向前进。
答案 0 :(得分:1)
桌面(包括其上的位图)实际上是由窗口系统本身绘制的。所以这基本上也是非常深刻和陈旧的。所以根据自NT4以来发生的变化,我想这幅画实际上是在win32k.sys中完成的。创建驱动程序是为了替换win32.dll,它将在用户模式下完成所有操作并进行上下文切换。
这就是说,它符合erykson对你的问题的评论:win32k!xxxInternalPaintDesktop
是坏人。
然而,应该可以获取桌面HWND的DC(0 afaik)并将其附加到您自己的图纸上。不确定您是否可以将其转换为DirectX DC,但这取决于您尝试。
顺便说一句。可以重新父和捕获外部窗口(HWND)和相关的设备上下文(DC)。但是,您可能需要特权或管理员。 (已检查安全性)
答案 1 :(得分:0)
桌面窗口管理器负责绘制壁纸。它是作为Windows服务实现的。