QT/windows桌面动态壁纸代码实现

前言

今天突然想换桌面的壁纸 想换个动态,网上那些桌面壁纸软件不是收费就是广告一大堆,所以决定自己写一个,看到github上有这个代码于是自己动手参照修改了一下

这是他的git地址 https://github.com/Masterlong-Dragon/VideoWallpaper/tree/master

功能
  1.  在支持视频,gif,网页基础上支持图片(.png .jpg)
  2. mp4视频需要安装LAVFilters解码器(在我的资源列表里有可直接下载)
  3. qt(msvc2017)需要装有webEngine,只使用视频和gif,效果也是很赞
  4. 把qt窗口渲染在桌面窗口下面
  5. 添加了托盘程序功能
 
代码实现

注意:这里只是重点代码展示 具体工程可在我资源文件下载;

 一: 首先获取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解码器

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的桌面倒计时代码,使用 Python 的 tkinter 库实现: ```python import tkinter as tk from datetime import datetime, timedelta class Countdown: def __init__(self, master, end_time): self.master = master self.end_time = end_time self.remaining = timedelta() self.label = tk.Label(master, text="", font=("Helvetica", 48)) self.label.pack() self.update() def update(self): now = datetime.now() self.remaining = self.end_time - now if self.remaining <= timedelta(): self.label.configure(text="Time's up!") return hours, remainder = divmod(self.remaining.seconds, 3600) minutes, seconds = divmod(remainder, 60) self.label.configure(text=f"{hours:02d}:{minutes:02d}:{seconds:02d}") self.master.after(1000, self.update) # 设置倒计时结束时间 end_time = datetime.now() + timedelta(minutes=30) # 创建GUI窗口 root = tk.Tk() root.title("Countdown") # 创建倒计时实例 countdown = Countdown(root, end_time) root.mainloop() ``` 这个代码创建了一个名为 Countdown 的类,它接收一个 tkinter 窗口对象和一个 datetime 对象作为参数。在类的构造函数中,它创建了一个标签,用于显示倒计时,然后调用 update() 方法来更新标签的文本。update() 方法计算当前时间与结束时间之间的时间差,并将其格式化为小时:分钟:秒的形式,然后将其设置为标签的文本。最后,它使用 `after()` 方法来在每秒钟更新一次倒计时文本。 在主程序中,我们设置了倒计时结束时间为当前时间加上 30 分钟,并创建了一个 tkinter 窗口对象。然后,我们创建了 Countdown 类的一个实例,并将它放入窗口中。最后,我们启动了 tkinter 的事件循环,并等待用户关闭窗口或倒计时结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值