1. 程式人生 > >[Winform]Media Player播放控制面板控制,單擊事件截獲

[Winform]Media Player播放控制面板控制,單擊事件截獲

oda catch 需求 cti _for fault 電腦 分享 cas

摘要

在項目中有這樣的一個需求,需要在一臺宣傳機器上循環播放一段視頻,並在體驗的用戶單擊鼠標左鍵的時候推出全屏,可以讓用戶體驗電腦的其它功能。

解決方案

考慮到都是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播放控制面板控制,單擊事件截獲