壁纸切换时WorkerW子窗口被覆盖及SHELLDLL视图适配问题求助
桌面窗口层级问题及尝试方案
初始实现与问题
我实践了将窗口绘制在桌面图标后方的方案,已成功将自己的窗口设置为WorkerW窗口的子窗口,使其显示在桌面图标后方:
但遇到一个问题:当用户切换壁纸或壁纸幻灯片播放时,我会在淡入淡出的壁纸切换动画启动后才检测到事件,此时系统会生成一个新的WorkerW窗口并绘制在原有WorkerW窗口上方。请问是否有办法快速获取新WorkerW的句柄,让我的窗口绘制在其后方,或是快速将我的窗口设为新WorkerW的子窗口,避免被覆盖的现象被用户察觉?
尝试Lemi方法后的效果

编辑2:嵌入SHELLDLL视图的尝试
我已成功将窗口嵌入SHELLDLL视图,并置于桌面图标(即名为GLFW30的list view)上方:
复现步骤:
- 获取任意应用程序的窗口句柄。
- 打开Spy++,找到SHELLDLL视图的窗口句柄,将其从十六进制转换为十进制后传入
SetParent(windowHWND, targetHWND)。 - 调用
SetWindowPos时,将listView32的窗口句柄作为hwndInsertAfter参数传入,运行程序后,当前窗口会被置于listview32下方:
但遗憾的是,listview32会覆盖我的窗口所有背景绘制内容,仅显示当前Windows壁纸:
内容的提问来源于stack exchange,提问作者Shubhz
相关产品推荐
相关产品推荐

