摘要

在项目中有这样的一个需求,需要在一台宣传机器上循环播放一段视频,并在体验的用户单击鼠标左键的时候推出全屏,可以让用户体验电脑的其它功能。

解决方案

考虑到都是windows系统的,所以采用了windows自带的播放器,Windows Media Player Com组件作为视频播放器。

如图

但是,为了更好满足需求,下面的播放控制面板需要隐藏,该怎么做呢?最后找到解决方案,设置播放器属性

windowsMediaPlay.uiMode = "none";

循环播放的代码,这里为播放器添加播放列表,代码如下:

 string[] filePaths = Directory.GetFiles(_videoDirPath).Where(x => x.EndsWith(".mp4") || x.EndsWith(".wmv")).ToArray();
//添加循环播放列表
foreach (var item in filePaths)
{
windowsMediaPlay.currentPlaylist.appendItem(windowsMediaPlay.newMedia(item));
}
//不再任务栏显示
this.ShowInTaskbar = false;
this.FormClosing += VideoFrm_FormClosing;
windowsMediaPlay.ClickEvent += windowsMediaPlay_ClickEvent;
windowsMediaPlay.KeyUpEvent += windowsMediaPlay_KeyUpEvent;
windowsMediaPlay.StatusChange += windowsMediaPlay_StatusChange;
windowsMediaPlay.ErrorEvent += windowsMediaPlay_ErrorEvent;
windowsMediaPlay.DoubleClickEvent += windowsMediaPlay_DoubleClickEvent;
windowsMediaPlay.Ctlcontrols.play();

那么,如何在用户单击的时候,让程序最小化?

注意

在uiMode = "none"的情况下,单击会触发视频暂停的事件,并不会退出。视频暂停,是不是视频状态变化了呢?所以在截获单击视频事件,我们完全可以在视频暂停的时候,对其进行截获。statechange事件对应的方法如下:

       void windowsMediaPlay_StatusChange(object sender, EventArgs e)
{
/*
* 0 Undefined Windows Media Player is in an undefined state.(未定义)
1 Stopped Playback of the current media item is stopped.(停止)
2 Paused Playback of the current media item is paused. When a media item is paused, resuming
playback begins from the same location.(停留)
3 Playing The current media item is playing.(播放)
4 ScanForward The current media item is fast forwarding.
5 ScanReverse The current media item is fast rewinding.
6 Buffering The current media item is getting additional data from the server.(转换)
7 Waiting Connection is established, but the server is not sending data. Waiting for session to begin.(暂停)
8 MediaEnded Media item has completed playback. (播放结束)
9 Transitioning Preparing new media item.
10 Ready Ready to begin playing.(准备就绪)
11 Reconnecting Reconnecting to stream.(重新连接)
*/
try
{
switch (windowsMediaPlay.playState)
{
case WMPLib.WMPPlayState.wmppsBuffering:
break;
case WMPLib.WMPPlayState.wmppsLast:
break;
case WMPLib.WMPPlayState.wmppsMediaEnded:
break;
case WMPLib.WMPPlayState.wmppsPaused:
//单击了视频则退出
HideVideo();
break;
case WMPLib.WMPPlayState.wmppsPlaying:
if (!windowsMediaPlay.fullScreen)
{
windowsMediaPlay.fullScreen = true;
}
break;
case WMPLib.WMPPlayState.wmppsReady:
break;
case WMPLib.WMPPlayState.wmppsReconnecting:
break;
case WMPLib.WMPPlayState.wmppsScanForward:
break;
case WMPLib.WMPPlayState.wmppsScanReverse:
break;
case WMPLib.WMPPlayState.wmppsStopped:
break;
case WMPLib.WMPPlayState.wmppsTransitioning:
break;
case WMPLib.WMPPlayState.wmppsUndefined:
break;
case WMPLib.WMPPlayState.wmppsWaiting: break;
default:
break;
}
}
catch (Exception ex)
{
LogInfoData.WriteLog(new LogInfo
{
Dt = DateTime.Now,
IsSend = false,
Message = ex.Message,
Op = "media_state_change_err"
});
}
}

关于双击全屏截获的逻辑也可以在这里处理,双击之前肯定会有一次单击,所以在这里也能进行双击最大化的处理。

[Winform]Media Player播放控制面板控制,单击事件截获的更多相关文章

  1. [Winform]Media Player com组件应用中遇到的问题

    摘要 最近一个项目中,需要用到在客户端全屏循环播放视频,当时考虑使用开源的播放器,但控制起来不方便,然后考虑既然都是windows系统,那么可以考虑使用微软自带的Media Player播放器.所以在 ...

  2. 基于MFC的Media Player播放器的制作(3---功能实现)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 下面我们试试一下,按下退出Button退出播放器的功能: 首先,我们双击退出Button按钮,就会弹出下图的框: 上面的弄好之后我们就实现 ...

  3. C# Winform使用Windows Media Player播放多媒体整理

    一.简单使用示例步骤 1.添加Windows Media Player 组件当前是系统的 Com组件 工具箱>右键“选择项”>选择Com组件 2.控件拖拽到桌面,使用 private vo ...

  4. [Winform]Media Player组件全屏播放的设置

    摘要 在设置程序开始运行时,让视频全屏播放时,直接设置 windowsMediaPlay.fullScreen = true; 会报错,代码如下 windowsMediaPlay.URL = _vid ...

  5. windows media player 播放视频

    一.新建windows应用程序项目,添加vedioForm窗体 二.在com组件中找到windows media player,添加引用 三.代码如下: public partial class Ve ...

  6. Swift - 使用Media Player播放本地视频,在线视频

    Media Player框架用于播放本地视频.音频,也可以在线播放视频和音频. 1,播放器MPMovieControlStyle样式有如下几种: (1)None: 没有播放控制控件 (2)Embedd ...

  7. Windows Media Player播放视频导致程序闪退

    在有的电脑上发现,使用Windows Media Player组件播放视频导致程序闪退. 发现是显卡问题,独立显卡换成集成显卡 解决: 打开显卡控制面板->管理3D设置->集成图形-> ...

  8. 基于MFC的Media Player播放器的制作(2---导入第三方库和介绍第三方库)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 这一节我们介绍如何导入类库,和介绍类库的一功能和介绍MFC的一些主要的模块部分.下面是如何导入类库.第一步我们选中 Media Playe ...

  9. 基于MFC的Media Player播放器的制作(1---播放器界面的布局)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 通过上面的一些预备知识,我们现在就可以自己来制作基于MFC的播放器了,接下来我们讲的是使用MFC制作我们播放器 的界面. 首先,我们我们打 ...

随机推荐

  1. Python学习三|列表、字典、元组、集合的特点以及类的一些定义

    此表借鉴于他人 定义 使用方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner', ...

  2. 《jquery实战》javascript 必知必会(2)

    A2 一等公民函数 在传统 OO 语言里,对象包含数据和方法.这些语言里,数据和方法通常是不同的概念:javascript另辟蹊径. 与其他 js 的类型一样,函数可以作为对象处理,如String.N ...

  3. 如果django里的视图是类(CBV),应该如何写Url的测试用例?

    晚上回家测试了很多方式,都不行. 网上搜索找不到答案, 最后还是官方文档最抵用呢. https://docs.djangoproject.com/en/2.1/topics/testing/tools ...

  4. AnyRobot

    AnyRobot http://www.sohu.com/a/151456051_656915 https://www.sohu.com/a/238065475_656915 http://www.d ...

  5. List集合去除重复对象及equals()、hashCode()方法的作用

    原文:https://blog.csdn.net/freelander_j/article/details/52211010 在java中,要将一个集合中重复的对象除去,如果这个集合中的数据类型是基本 ...

  6. WinSCP命令行操作

    WinSCP命令行操作     WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 直接在cmd下输入 ...

  7. 003.RAID管理

    一 查看RAID组信息 [root@kauai ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Aug 29 22: ...

  8. 006.SMB之用户管理

    一 用户添加 注意: 1 添加samba密码必须已经是系统用户,才能添加为samba用户. 2 samba账户密码可以和系统账号密码不一致(建议设为不同密码). 1.1 smbpasswd [root ...

  9. SpringAOP实战应用

    Springboot中使用AOP特性非常简单,使用@AspectJ注解,然后再配置中开启AspectJ即可.在日常的应用,有时可以将日志记录和异常处理在一个拦截器中统一处理,但有时在项目中无法通过一个 ...

  10. 基于jquery的水平滚轴组件,多参数可设置。

    闲来无事,继续封装.此次封装的为水平滚轴组件,可选择滚动的距离大小.闲话不多说,直接上图. 参数说明: vis:4                中间区域可显示的 li 个数 scroll:4     ...