開源自己前段時間使用 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+ 詳細描寫了在桌面圖示下面繪製一個視窗的方法。我是參考了這個部落格實現的這個功能。