听说Wallpaper Engineer很火的样子所以就想自己写一个,然后研究了一下相关的东西
先说WIN8之后的版本的方法
首先奉上原链接:
接着我简单总结一下
用SendMessageTimeOut函数向Program Manager窗口发送0x52c消息,wParam为0,这个消息使得桌面图标层窗口与背景层窗口的父子关系分离,也就是说这俩货毫不相干了,然后桌面会在这两个窗口之间创建一个WorkerW窗口,用于背景图案的过渡(本来这个消息就是在切换背景时使用的)
所以这时候我们把我们的窗口设置成WorkerW的子窗口就可以将窗口绘制在图标下面了,顺便一提这时候窗口上的按钮啦文本框啦也都不会被鼠标碰到,所以如果还想让窗口能被操作就自己获取鼠标键盘消息吧= =
然后说一下原文没说的如何销毁WorkerW窗口,发送0x52c消息,wParam设为1就好了
wParam设为2和0一样,3和1一样
wParam为4时返回是否能使用0x52c创建WorkerW窗口,如果WorkerW被我们手动DestroyWindow而不是用0x52c销毁这个会一直返回0
先说WIN8之后的版本的方法
首先奉上原链接:

接着我简单总结一下
用SendMessageTimeOut函数向Program Manager窗口发送0x52c消息,wParam为0,这个消息使得桌面图标层窗口与背景层窗口的父子关系分离,也就是说这俩货毫不相干了,然后桌面会在这两个窗口之间创建一个WorkerW窗口,用于背景图案的过渡(本来这个消息就是在切换背景时使用的)
所以这时候我们把我们的窗口设置成WorkerW的子窗口就可以将窗口绘制在图标下面了,顺便一提这时候窗口上的按钮啦文本框啦也都不会被鼠标碰到,所以如果还想让窗口能被操作就自己获取鼠标键盘消息吧= =
然后说一下原文没说的如何销毁WorkerW窗口,发送0x52c消息,wParam设为1就好了
wParam设为2和0一样,3和1一样
wParam为4时返回是否能使用0x52c创建WorkerW窗口,如果WorkerW被我们手动DestroyWindow而不是用0x52c销毁这个会一直返回0