前言
今天突然想换桌面的壁纸 想换个动态,网上那些桌面壁纸软件不是收费就是广告一大堆,所以决定自己写一个,看到github上有这个代码于是自己动手参照修改了一下
这是他的git地址 https://github.com/Masterlong-Dragon/VideoWallpaper/tree/master
功能
- 在支持视频,gif,网页基础上支持图片(.png .jpg)
- mp4视频需要安装LAVFilters解码器(在我的资源列表里有可直接下载)
- qt(msvc2017)需要装有webEngine,只使用视频和gif,效果也是很赞
- 把qt窗口渲染在桌面窗口下面
- 添加了托盘程序功能
代码实现
注意:这里只是重点代码展示 具体工程可在我资源文件下载;
一: 首先获取windowS的窗口句柄 如下图:
这里会看到在获取窗口句柄之前有一个发送消息,我们看一下怎么实现:
附上参考连接:https://www.codeproject.com/articles/856020/draw-behind-desktop-icons-in-windows
为什么有这一步呢 主要是当您更改桌面壁纸时,会在保存 windowsICON() 的实例和桌面管理器之间创建一个新窗口。WorkerW
WorkerW
SysListView32
我拿起那个新窗口的手柄,把它放到我的测试程序中,它终于能够在桌面图标后面绘制,就在墙纸的正上方!WorkerW
一个问题仍然存在。当我关闭个性化对话框时,它删除了那个新窗口。WorkerW
我必须找到一种方法来触发此窗口的创建。WorkerW
Spy++ 将窗口报告为程序管理器的同级和子窗口,因此看起来是程序管理器创建的。我使用 Spy++ 为程序管理器打开了消息监控,并找到了我想要的内容。
单击更改桌面墙纸后,程序管理器会立即收到一堆消息。第一个是用户定义且未记录的消息。这在“最近”添加后散发着恶臭。
我扩展了测试程序,将这个用户定义的消息(0x052C)准确地发送到程序管理器。它完全符合我的希望。收到消息后,程序管理器将创建窗口。WorkerW
二:获取窗口句柄这个比较常见直接上代码:
三:自己建立关于图片,动图,视频,和html相关的类,如下图:
最终的实现 具体参见详细代码 代码工程在我的资源文件中可下载;
在mianwindow中的核心实现如下:
好了到这一步基本的功能算是完成了 但是具体类的实现需要自己去写 此处并没有一一展示,
提供几个下载桌面背景图的免费网站:
极简壁纸_海量电脑桌面壁纸美图_4K超高清_最潮壁纸网站 (zzzmh.cn)
手机壁纸大全-高清好看的图片,明星,性感美女图片大全 (3gbizhi.com)
世界著名的壁纸网站 电脑桌面壁纸 - WallHere 壁纸库
新桌布网-高清4K8K电脑桌面壁纸原图分享站 (xinzhuobu.com)
好了以上就分享到这啦
源代码工程看这里
关注我在我的资源文件里可直接下载,源码里面如下文件里面包含测试壁纸和LAVFilters解码器