您当前的位置: 首页 资讯 >

动态壁纸实现 wallpaper

2023-01-22 17:52:52 来源:哔哩哔哩

前言

由于本人在笔记本上使用wallpaper engine无法播放视频(有可能是编解码器的问题)


【资料图】

但是由于windows 10 1909及以上的版本media feature package无法从msdn上下载到,所以无法更新编解码器。(有可能windows update能更新但是我已经组策略禁用windows更新了,所以不想折腾了)

所以这两天看了下wallpaper engine的代码,发现其实也是利用到给explorer的Progman窗口发送0x52c代码的原理实现动态壁纸的

wallpaper engine实现原理

首先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

x 广告
x 广告

Copyright ©  2015-2023 今日科学网版权所有  备案号:沪ICP备2023005074号-40   联系邮箱:5 85 59 73 @qq.com