admin 管理员组

文章数量: 1184232

目录


篇章前言

上一篇我们已经实现了视频列表的展示(效果还不错呢!),而这一篇我们将实现打开播放器播放视频以及打开文件夹

打开文件夹

功能相对简单,就是上篇提到的事件和命令的使用,界面按钮绑定命令传路径参数即可

界面按钮

   <Button Content="打开文件夹" Margin="5" Style="{StaticResource ButtonDashed}" Command="{Binding Source={StaticResource Locator},Path=Main.OpenFolderCommand}" CommandParameter="{Binding DataContext.FolderPath,RelativeSource={RelativeSource AncestorType=hc:Card}}"  />
                                   

后端命令

        /// <summary>
        /// 点击打开文件夹
        /// </summary>
        public RelayCommand<string> OpenFolderCommand
        {
            get
            {
                var command = new RelayCommand<string>((string path) =>
                {
                    //打开路径
                    System.Diagnostics.Process.Start(path);
                });
                return command;
            }
        }
运行可执行文件

宝妈提需求时说使用暴风影音播放,而我脑子里想的是自己开发个播放器,但想了想那么多的格式解码复杂的工程,开发到什么时候,何况咱们只是解决宝宝不乱看视频的问题。

多方尝试用命令行的方式加参数可以让暴风音影打开,并可以将视频加播放列表中

虽然命令行是能帮我们把视频放入播放列表,但它是追加的方式,并没有达到我们的预期,我们希望只加载本系列的视频!!!经过一阵百度后,没有找到相关清理的参数。(失望)

经过几经周转,分析到暴风影音播放列表数据存在 系统盘的 某XML 里 StormPlayer.smpl

这下好办了,帮它重写XML,然后直接打开暴风影音这事就解决了。

        /// <summary>
        /// 点击播放按钮
        /// </summary>
        public RelayCommand<string> PlayFileCommand
        {
            get
            {
                var command = new RelayCommand<string>((string path) =>
                {
                    if (!Directory.Exists(Common.CacheData.StormPlayerSmplPath.Replace("StormPlayer.smpl", "")))
                    {
                        Directory.CreateDirectory(Common.CacheData.StormPlayerSmplPath.Replace("StormPlayer.smpl", ""));
                    }
                    //关闭暴风影音,杀掉进程
                    Utils.KillProcess(Common.CacheData.PlayerNanme.Replace(".exe", ""));
                    //载入暴风影音播放列表
                    string fileName = LoadFile(path);
                    //开启暴风影音
                    Utils.StartProcess(CacheData.PlayerPath + "\\" + CacheData.PlayerNanme, fileName);
                });
                return command;
            }
        }
        /// <summary>
        /// 装载目录下的视频路径,写入暴风影音存放播放列表的StormPlayer.smpl文件中
        /// </summary>
        /// <param name="path"></param>
        string LoadFile(string path)
        {
            string[] _fileVideos = Utils.GitFileVideos(path); //查询视频文件
            //封装视频列表 XML 内容 
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<Playlist Ver=\"0.2\">");
            sb.AppendLine("<Items>");
            for (int i = 0; i < _fileVideos.Length; i++)
            {
                string[] vs = _fileVideos[i].Split('\\');
                string _name = vs[vs.Length - 1];
                string _path = _fileVideos[i];
                sb.AppendLine(string.Format("  <Item Name=\"{0}\" Source=\"{1}\"  VideoID=\"{2}\" />", _name, _path, i + 1));
            }
            sb.AppendLine("</Items>");
            sb.AppendLine("</Playlist>");
            //删除旧的 StormPlayer.smpl
            if (File.Exists(Common.CacheData.StormPlayerSmplPath))
            {
                File.Delete(Common.CacheData.StormPlayerSmplPath);
            }
            //创建新的 StormPlayer.smpl
            FileStream fs = new FileStream(Common.CacheData.StormPlayerSmplPath, FileMode.Create);
            using (StreamWriter sw = new StreamWriter(fs))
            {
                sw.Write(sb.ToString());
                sw.Flush();
                sw.Close();
                fs.Close();
            }
            return _fileVideos[0];
        }
关闭应用

每次点击播放的事件,后台实际的工作是,关闭应用,重写xml,打开应用 的过程

        /// <summary>
        /// 杀掉进程
        /// </summary>
        /// <param name="strProcessesByName">名称不带扩展名</param>
        public static void KillProcess(string processName)
        {
            foreach (Process p in Process.GetProcesses())
            {
                if (p.ProcessName.Contains(processName))
                {
                    try
                    {
                        p.Kill();
                        p.WaitForExit(); // possibly with a timeout
                    }
                    catch (Win32Exception e)
                    {
                    }
                    catch (InvalidOperationException e)
                    {
                    }
                }
            }
        }
打开应用
        /// <summary>
        /// 开启可执行文件
        /// </summary>
        /// <param name="path">完整路径</param>
        /// <param name="val">参数</param>
        public static void StartProcess(string path, string val = "")
        {
            //启动暴风影音程序
            ProcessStartInfo versionUpdatePrp = new ProcessStartInfo(path, val);
            Process newProcess = new Process();
            newProcess.StartInfo = versionUpdatePrp;
            newProcess.Start();
        }
功能完毕

至此 “一仔播放器” 已经算是可用了。每个人的视频存放路径及安装暴风影音的路径不同,使用前修改一下配置文件的路径即可。

YiZaiPlayer.exe.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
	</startup>
	<appSettings>
		<!--视频存放的文件夹路径-->
		<add key="FolderPath" value="Z:\"/>
		<!--播放器安装的文件夹路径-->
		<add key="PlayerPath" value="H:\Program Files (x86)\Baofeng\StormPlayer"/>
	</appSettings>
</configuration>
开源地址

本文标签: 关闭应用 编程 打开应用