由于本人在笔记本上使用wallpaper engine无法播放视频(有可能是编解码器的问题)
【资料图】
但是由于windows 10 1909及以上的版本media feature package无法从msdn上下载到,所以无法更新编解码器。(有可能windows update能更新但是我已经组策略禁用windows更新了,所以不想折腾了)
所以这两天看了下wallpaper engine的代码,发现其实也是利用到给explorer的Progman窗口发送0x52c代码的原理实现动态壁纸的
首先wallpaper engine给explorer的Progman窗口发送0x52c消息,致使Progman结构变化
此时,产生的第一个WorkerW内包含的原先的Progman的图标组,第二个WorkerW内包含的是原先Progman的桌面壁纸
我们只需要把自己的动态视频的窗口放入第二个WorkerW的窗口下就可以实现播放动态壁纸(本质是视频窗口)
首先我们获取桌面的长宽以便动态壁纸覆盖全部桌面
接着我们需要创建一个视频窗口,这里使用ffplay作为渲染器创建
接下来我们需要向Progman发送0x52c
接着我们找到产生的第二个WorkerW的窗口句柄
接着我们把视频的窗口设置在第二个WorkerW的内部
最后我们还需要向播放器窗口发送以下消息让播放器窗口不会在‘显示桌面’时消失
同时wallpaper engine还附带了修改桌面图标透明度的功能,经由分析wallpaper是这样实现的
最后附上完整实现代码:https://github.com/YuHuanTin/CodeRepository_Public/blob/main/Wallpaper/main.cpp
Copyright © 2015-2023 今日科学网版权所有 备案号:沪ICP备2023005074号-40 联系邮箱:5 85 59 73 @qq.com