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>开源地址
版权声明:本文标题:宝妈的需求“一仔播放器” WPF 的开源项目(四 唤起播放器,关闭应用、打开应用)_wpf 网络资源播放器 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1774170037a3568642.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论