.net 写一段屏保程序,读取电脑中的图片或者视频进行循环播放

以下是一个基于 ‌.NET 6 WPF‌ 实现的简单屏保程序示例,支持循环播放指定文件夹中的图片和视频。程序会全屏运行,并自动检测用户输入(移动鼠标或按键)退出。

步骤 1:创建 WPF 项目‌
使用 Visual Studio 创建 ‌WPF 应用程序‌,命名为 MediaScreensaver。
添加必要的 NuGet 包:
bash
Copy Code
Install-Package Microsoft.Windows.SDK.Contracts -Version 10.0.22000.196

步骤 2:编写代码‌
MainWindow.xaml‌
xml
Copy Code



    <!-- 视频播放控件 -->
    <MediaElement x:Name="VideoDisplay" LoadedBehavior="Manual" UnloadedBehavior="Stop" 
                  MediaEnded="VideoDisplay_MediaEnded" Visibility="Collapsed"/>
</Grid>

MainWindow.xaml.cs‌
csharp
Copy Code
using System;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;

namespace MediaScreensaver
{
public partial class MainWindow : Window
{
private string[] _mediaFiles; // 支持的媒体文件路径
private int _currentIndex = 0; // 当前播放索引
private DispatcherTimer _timer; // 切换计时器

    public MainWindow()
    {
        InitializeComponent();
        Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        // 隐藏光标
        Cursor = Cursors.None;

        // 查找媒体文件(示例路径,可自定义)
        string mediaFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
        _mediaFiles = Directory.GetFiles(mediaFolder, "*.*", SearchOption.AllDirectories)
            .Where(f => IsSupportedMedia(f))
            .ToArray();

        if (_mediaFiles.Length == 0)
        {
            MessageBox.Show("未找到支持的媒体文件!");
            Close();
            return;
        }

        // 初始化计时器(每隔10秒切换)
        _timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(10) };
        _timer.Tick += Timer_Tick;
        _timer.Start();

        // 播放第一个文件
        PlayMedia(_currentIndex);
    }

    // 判断是否为支持的媒体格式
    private bool IsSupportedMedia(string filePath)
    {
        string ext = Path.GetExtension(filePath).ToLower();
        return new[] { ".jpg", ".jpeg", ".png", ".bmp", ".mp4", ".wmv", ".avi" }.Contains(ext);
    }

    // 播放媒体
    private void PlayMedia(int index)
    {
        if (index < 0 || index >= _mediaFiles.Length) return;

        string file = _mediaFiles[index];
        string ext = Path.GetExtension(file).ToLower();

        // 根据文件类型切换控件
        if (ext is ".mp4" or ".wmv" or ".avi")
        {
            VideoDisplay.Visibility = Visibility.Visible;
            ImageDisplay.Visibility = Visibility.Collapsed;
            VideoDisplay.Source = new Uri(file);
            VideoDisplay.Play();
        }
        else
        {
            VideoDisplay.Visibility = Visibility.Collapsed;
            ImageDisplay.Visibility = Visibility.Visible;
            ImageDisplay.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri(file));
        }
    }

    // 计时器切换下一个文件
    private void Timer_Tick(object sender, EventArgs e)
    {
        _currentIndex = (_currentIndex + 1) % _mediaFiles.Length;
        PlayMedia(_currentIndex);
    }

    // 视频播放完成后自动切换
    private void VideoDisplay_MediaEnded(object sender, RoutedEventArgs e)
    {
        _timer.Stop();
        _currentIndex = (_currentIndex + 1) % _mediaFiles.Length;
        PlayMedia(_currentIndex);
        _timer.Start();
    }

    // 用户输入时退出屏保
    protected override void OnMouseMove(MouseEventArgs e)
    {
        Close();
    }

    protected override void OnKeyDown(KeyEventArgs e)
    {
        Close();
    }
}

}

App.xaml.cs‌(处理命令行参数)
csharp
Copy Code
using System.Windows;

namespace MediaScreensaver
{
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
// 处理屏保启动参数
if (e.Args.Length > 0)
{
string arg = e.Args.ToLower();
switch (arg)
{
case "/s": // 启动屏保
new MainWindow().Show();
break;
case "/c": // 配置(示例)
MessageBox.Show("配置功能未实现");
Current.Shutdown();
break;
default:
Current.Shutdown();
break;
}
}
else
{
Current.Shutdown();
}
}
}
}

步骤 3:编译为屏保程序‌
在项目属性中设置输出类型为 ‌Windows 应用程序‌。
编译生成 MediaScreensaver.exe。
将文件重命名为 MediaScreensaver.scr。
步骤 4:安装屏保程序‌
复制 MediaScreensaver.scr 到系统屏保目录:
powershell
Copy Code
Copy-Item .\MediaScreensaver.scr "$env:windir\System32"

打开 ‌屏幕保护设置‌:
选择 MediaScreensaver。
设置等待时间。
功能特性‌
全屏播放‌:自动最大化,隐藏窗口边框和光标。
格式支持‌:图片(JPG/PNG/BMP)和视频(MP4/WMV/AVI)。
自动切换‌:默认每10秒切换媒体,视频播放完成后立即切换。
用户退出‌:移动鼠标或按键关闭屏保。
扩展建议‌
自定义文件夹‌:
添加配置文件(如 settings.json)让用户指定媒体路径。
随机播放‌:
在 _mediaFiles 加载后使用 Random.Shuffle 打乱顺序。
多显示器支持‌:
使用 System.Windows.Forms.Screen.AllScreens 在每个显示器上创建窗口。
过渡动画‌:
在图片切换时添加淡入淡出效果。
注意事项‌
视频解码‌:确保系统已安装必要的编解码器(如 K-Lite Codec Pack)。
性能优化‌:避免加载过大的视频文件导致内存溢出。
安全提示‌:屏保程序需通过数字签名避免被系统拦截。

posted @ 2025-03-25 10:25  今天昔水  阅读(55)  评论(0)    收藏  举报