C# 编写Windows动态桌面软件(GIF 和 APNG播放)
C# 编写Windows动态桌面软件(GIF 和 APNG播放)
开源自己前段时间使用 C# 编写的 Windows 动态桌面软件,在接下来的博客我将描写一些技术细节和遇到的一些坑。这个软件可以把视频设置成桌面背景播放,不仅如此而且还可以把网页或一个网页文件设置成桌面背景播放。支持 .NET Framework 4.7.2 和 .NET Core 两个运行时编译,支持 Windows10/11 系统(支持 Windows8 以上系统,手里没有 Windows8 系统没有测试)。
欢迎 Star 和 Fork。GitHub: https://github.com/he55/DreamScene2

特性
- 支持视频播放(目前使用的 WPF 框架内置的 MediaElement 播放视频仅支持 .mp4, .mov 视频文件,后面增加其他播放引擎)
- 支持 URL 和网页文件
- 支持启动后自动播放
- 支持设置显示器
- 支持自动暂停播放

下一步
- GIF 和 APNG 播放
- Live2D 播放
- 使用鼠标和桌面交互
- 屏幕保护程序
- 更多视频格式
使用技术
使用到了 WinForms, WPF, WebView2, Native 等技术,各取其优点来实现项目功能
- WinForms: 创建菜单简单,方便处理 Windows 消息
- WPF: 使用了内置媒体播放功能,播放 .mp4 文件够了。其他播放引擎运行时太大
- WebView2: 和 CefSharp 比较 WebView2 有 Edge 加持不需要携带一个巨大的运行时,而且安装简单下载速度也快有微软 CDN 加速
- Native: C# P/Invoke 支持的很完善,但是如果需要调用大量 Windows API。还是使用 C++ 写比较简单,然后提供接口 C 接口给 C# 调用
动态桌面软件原理
如果能把一个窗口放在桌面背景桌面图标之间,然后在自己的这个窗口播放视频或者动画,桌面就有动态效果了。作者 Gerald Degeneve 的一篇博客 Draw Behind Desktop Icons in Windows 8+ 详细描写了在桌面图标下面绘制一个窗口的方法。我是参考了这个博客实现的这个功能。
参考文档:
C# 编写 Windows 动态桌面软件实现 - GIF图片桌面交互功能
使用Photoshop PS制作GIF动画(等待窗体GIF图标)|C/S开发框架
C#.NET7 多线程播放mp3/wav音频|winmm.dll winapi播放音乐文件|C/S开发框架
Windows桌面系统软件开发框架 | 基于.NET Framework开发平台|C/S开发框架
C/S系统快速开发平台采用Windows服务承载的WCF服务器
分享几个C#编写的类似Window Explorer源代码
SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案|C/S开发框架
VS2022/.NET7:CA1416:可在所有平台上访问此调用站点。"xxx"仅在 'windows'上受支持。
使用dos命令强制停止Windows服务|C/S开发框架
从注册表强制卸载已禁用的Windows服务|C/S开发框架
Windows服务定时作业计划软件框架(C#)|C/S开发框架
C#根据本地IP获取MAC地址(Windows API SendARP函数方式)|C/S开发框架
Windows服务弹出Winform窗体应用程序实现桌面交互|C/S开发框架
数据字典窗体编写窗体的代码|开发教程
C# System.ServiceProcess类操作Windows服务,判断服务状态,启动停止服务-C/S开发框架
C# Image图片格式转换(gif/jpg/png/bmp)-C/S开发框架
C# 编写 Windows 动态桌面软件实现 - GIF图片桌面交互功能
使用Photoshop PS制作GIF动画(等待窗体GIF图标)|C/S开发框架
C#.NET7 多线程播放mp3/wav音频|winmm.dll winapi播放音乐文件|C/S开发框架
Windows桌面系统软件开发框架 | 基于.NET Framework开发平台|C/S开发框架
C/S系统快速开发平台采用Windows服务承载的WCF服务器
分享几个C#编写的类似Window Explorer源代码
SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案|C/S开发框架
VS2022/.NET7:CA1416:可在所有平台上访问此调用站点。"xxx"仅在 'windows'上受支持。
使用dos命令强制停止Windows服务|C/S开发框架
从注册表强制卸载已禁用的Windows服务|C/S开发框架
Windows服务定时作业计划软件框架(C#)|C/S开发框架
C#根据本地IP获取MAC地址(Windows API SendARP函数方式)|C/S开发框架
Windows服务弹出Winform窗体应用程序实现桌面交互|C/S开发框架
数据字典窗体编写窗体的代码|开发教程
C# System.ServiceProcess类操作Windows服务,判断服务状态,启动停止服务-C/S开发框架
C# Image图片格式转换(gif/jpg/png/bmp)-C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
