编写一个小而强大的 Windows 动态屏保壁纸
寫在前面
兩年前我做了第一個開源軟件 DreamScene2 動態桌面,如今受到了很多人的喜歡,這增加了我繼續做好開源軟件的信心。之前的這個軟件一直有人希望我加入一個設置屏保壁紙的功能,因為 DreamScene2 就是一個單純的動態桌面的軟件,所以一直沒有加入這個功能。今天我帶來一個新的開源軟件,軟件依然是小而強大,簡潔并且快速。
歡迎 Star 和 Fork: https://github.com/he55/SonomaWallpaper
介紹
Sonoma Wallpaper 是首款將 macOS Sonoma 4k 120 幀動態屏保壁紙帶到 Windows 11 的軟件,壁紙包含了自然景觀、城市景觀、水下景觀和地球四個主題的屏保共有 134 個 4k 屏保壁紙。
功能
- 4k 120 幀率視頻播放
- 多語言
- 高 dpi 支持
- 深色模式
- 多任務下載
- Windows 11 支持
如何使用
選中已下載的視頻壁紙,然后打開 顯示為屏幕保護程序 開關,程序會在 2 分鐘系統無操作時自動播放屏保壁紙。
下載壁紙
- 選擇一個壁紙點擊下載
- 等待壁紙下載完成
- 壁紙下載完成后,可以點擊預覽按鈕看效果
視頻播放功能代碼
在解碼 4k 120 幀視頻的時候我試過 VLC、迅雷的 APlayer、mpv、ffmpeg、PotPlayer 這些引擎或播放器,發現在 Windows 10 上它們對 120 幀視頻支持的都不好。最后發現 Windows 11 已經原生支持了 120 幀視頻播放,但只有 UWP 和 WinUI3 程序原生支持。WPF 要使用 UWP 的控件需要安裝 Microsoft.Toolkit.Wpf.UI.XamlHost 這個 NuGet 包,這個包可以讓 Win32 程序調用 UWP 的控件。包安裝后在 xaml 文件中添加名稱空間 xmlns:xamlhost="clr-namespace:Microsoft.Toolkit.Wpf.UI.XamlHost;assembly=Microsoft.Toolkit.Wpf.UI.XamlHost",然后添加 WindowsXamlHost 控件用來顯示 UWP 的 MediaPlayerElement 媒體播放控件。
完整代碼如下
<Window x:Class="WpfApp21.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp21"
xmlns:xamlhost="clr-namespace:Microsoft.Toolkit.Wpf.UI.XamlHost;assembly=Microsoft.Toolkit.Wpf.UI.XamlHost"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<xamlhost:WindowsXamlHost
ChildChanged="WindowsXamlHost_ChildChanged"
InitialTypeName="Windows.UI.Xaml.Controls.MediaPlayerElement" />
</Window>
添加 ChildChanged 事件用來處理 MediaPlayerElement 控件創建成功后的要做的事情
- Stretch 設置視頻拉伸模式
- Source 設置播放文件路徑
- AutoPlay 設置自動播放
- IsMuted 設置靜音
- IsLoopingEnabled 設置循環播放
private void WindowsXamlHost_ChildChanged(object sender, EventArgs e)
{
MediaPlayerElement mediaPlayerElement = (MediaPlayerElement)((WindowsXamlHost)sender).Child;
if (mediaPlayerElement != null)
{
mediaPlayerElement.Stretch = Windows.UI.Xaml.Media.Stretch.UniformToFill;
mediaPlayerElement.Source = MediaSource.CreateFromUri(new Uri("C:\wallpapers\comp_LW_L001_C006_PSNK_DENOISE_v02_SDR_PS_FINAL_20180709_FRC_sdr_4k_qp20_240p_t2160_tsa.mov"));
mediaPlayerElement.AutoPlay = true;
mediaPlayerElement.MediaPlayer.IsMuted = true;
mediaPlayerElement.MediaPlayer.IsLoopingEnabled = true;
}
}
總結
以上是生活随笔為你收集整理的编写一个小而强大的 Windows 动态屏保壁纸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI 图像自动补全 Uncrop 工具
- 下一篇: 关于echarts+vue频繁刷新的造成