我想使用DirectX为Windows 7创建一个动态桌面背景。我使用C#、SlimDX以及一些Windows API函数的P/Invoke引入。我不是很擅长本地Windows编程,但我在网上搜索过并认为我需要做的是:
1)找到包含桌面壁纸的窗口句柄,将其连接到DirectX设备并绘制到其中。
2)创建一个新的输出窗口,并将其插入到桌面壁纸上方但在桌面图标下方。
我尝试了这两种方法,但似乎都没有奏效。如果我从GetDesktopWindow()返回的句柄开始导航窗口层次结构,我可以按照Desktop -> WorkerW -> SHELLDLL_DefView -> SysListView32的顺序访问。如果我将DirectX设备连接到该句柄,我可以绘制整个桌面,但它也会遮盖住图标。如果我创建一个Windows表单,将其父级设置为SHELLDLL_DefView,然后使用SetWindowPos来调整其Z顺序,则只能使它出现在桌面壁纸后面或者桌面+图标前面。
看起来桌面壁纸是包含图标的文件夹视图的背景,因此我想要的操作不能生效。那么唯一的解决方法就是不使用桌面来放置图标,或者找到其他替代方案,例如覆盖桌面然后叠加一个透明窗口,其中包含某个文件夹内容的视图。
有人知道我应该做些什么吗,甚至是否可能实现我想要做的事情吗?似乎可以使用GDI(正如我所认为的wxSnow程序所做的那样)绘制到桌面背景,并且我看到VLC Media Player在Windows XP下使用其DirectX壁纸模式完成了与我想要的类似的功能(有趣的是,我无法在我的系统上启用此选项)。
谢谢!