2013-05-11 45 views
3

我正在使用Windows窗體應用程序,在該應用程序中嵌入了可讓您播放視頻文件的Windows Media Player。獨一無二的是,我改變了媒體文件的擴展名(原因在這裏我無法理解)。例如,「xyz.wmv」可能被稱爲「xyz.ext」。他們玩的很好,但在他們玩之前,我得到的消息是:從嵌入式Windows Media PLayer抑制消息

「你試圖播放的文件的擴展名與文件格式不匹配,播放該文件可能會導致意外的行爲。玩家試圖播放該文件?「

你可以點擊yes,你甚至可以選擇不顯示該消息的方塊,但是我不希望所有的明顯的原因包括它混淆了用戶的事實。我已經研究過.settings屬性,但是我找不到一種方法來壓制這條消息,更重要的是可能會出現其他消息。

+0

OK,我就這樣的代碼: 私人小組wmpPlayer_Warning(發送者爲對象,E作爲_WMPOCXEvents_WarningEvent)處理WMPlayer.Warning MSGBOX(e.warningType.ToString) 但出現的消息,並沒有達到這個代碼... End Sub Private Function wmPlayer_Warning()As Object Throw New NotImplementedException End Function – Chiwda 2013-05-12 17:15:43

+0

@abcdefghi:賞金問題是無關的。分別詢問以獲得答案。 – 2013-09-27 15:28:01

+0

@RomanR。看起來和我的問題幾乎相同,只是他想用代碼來處理它。另外 - 我給出的答案應該已經解決了,除非我錯誤地解決了這個問題?我同意我會重新提出並鏈接到這個問題,但賞金已經設定... – Matthew 2013-09-27 16:37:19

回答

3

媒體播放器不知道.ext(例如)擴展名,因此警告。

你可以做些什麼來改變這是修改註冊表並註冊這個擴展名。這說明正式在這裏:File Name Extension Registry Settings

最簡單的方法來做到這一點是創建這樣一個註冊表項:

HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Player\Extensions\.ext 

並添加兩個鍵值:

Runtime (DWORD): 6 
Permissions (DWORD): 15 (or 0xF in hexa) 

這顯示這裏:

enter image description here

+0

該擴展已經註冊到我的應用程序。但是,Windows Media Player嵌入在我的應用程序中。我把文件名傳給玩家,它給了我上述的警告。很明顯,我不想在兩個地方註冊擴展名... – Chiwda 2013-05-13 11:53:16

+0

隨着我的回答,我沒有任何與嵌入式媒體播放器的警告,你有嘗試過嗎? – 2013-05-13 11:55:57

+0

我確信你是正確的,消息將消失。並感謝您的解決方案。但是,有兩個問題。首先,我不知道是否以及如何影響註冊到我的應用程序的文件關聯。其次,我想找到一個通用的答案,所以我可以管理一般的警告和錯誤。我當然會嘗試你的解決方案,但我不想衝進註冊表 - 它總是會給我造成恐懼和恐懼。 :-) – Chiwda 2013-05-15 08:13:41

0

注意:這個答案最初是爲了迴應一個賞金問題,並編輯刪除了如何通過代碼做到這一點。這部分與原始問題仍然有關。

你可以做到這一點非常簡單IF你有管理權限,因爲你需要編輯註冊表。不知道沒有管理員權限會得到多少,並且可以稍後再測試,但是這裏是如何通過代碼來做到這一點的(在一個真正的實現中,我會這樣做作爲設置的一部分 - 或者檢查每次存在的密鑰是否浪費):

您需要添加一個鍵(顯示兩個在這裏登記的擴展,您可能需要使用自動播放的附加鍵或播放器上設置):

private void Form1_Load(object sender, EventArgs e) { 
/*This first key is not necessary - and if you will be using common 
    * extensions like mp4, skip this step altogether!! 
    */ 
RegistryKey key = Registry.CurrentUser.OpenSubKey("Software", true) 
             .OpenSubKey("Classes", true); 
key.CreateSubKey(".myExt"); 
key = key.OpenSubKey(".myExt", true); 
key.SetValue("", "WMP11.AssocFile.myExt"); 
key.SetValue("Content Type", "video/x-ms-wmv"); 
key.SetValue("PerceivedType", "video"); 

/*Here is the magic key which will make the dialog go away*/ 
key = Registry.CurrentUser.OpenSubKey("Software", true) 
          .OpenSubKey("Microsoft", true) 
          .OpenSubKey("MediaPlayer", true) 
          .OpenSubKey("Player", true) 
          .OpenSubKey("Extensions", true); 
key.CreateSubKey(".myExt"); 
key = key.OpenSubKey(".myExt", true); 
key.SetValue("", ""); 
key.SetValue("Permissions", 0x20); 

axWindowsMediaPlayer1.URL = @"C:\Users\Public\Documents\Wildlife.myExt"; 
} 

媒體播放器創建其他鍵當你通過對話框添加時,但唯一需要的是:HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions

如果你想看到所有的keys Media Player的補充,

  1. 選擇一個瘋狂的擴展,促使然後
  2. 在註冊表中搜索該得到創建的所有密鑰時
  3. 點擊始終允許。

上面的代碼已經過測試和爲我工作 - 在添加按鍵之前確認對話框,之後缺少任何對話框。

這是一個很好的通用過程,用於以編程方式將文件關聯和默認程序添加到.NET的Windows註冊表。您必須注意註冊分機(我設置的第一個鍵)IF分機已存在(測試此)。否則,上面的代碼會愉快地覆蓋你的當前值。無論如何,你真正需要的是添加到:HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions。考慮一下,提前檢查,並在註冊表瘋狂之前進行測試!

在使用它之前備份註冊表也是一個好主意。

最後一點:錯過了你如何重現,一旦你點擊始終允許提問:剛纔刪除HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions瞧入口!

此答案假定您具有regedit的工作知識。

最後注意事項#2:面向賞金中的問題做出迴應。其他錯誤可以通過設置告訴媒體播放器,以允許您處理錯誤事件,然後編寫自定義處理程序來抑制。我之前沒有這樣做過,所以無法通過這個method對易用性和可以控制什麼進行評論。

Windows Media Player控件在遇到錯誤(如無效URL)時不會引發異常。相反,它表示一個事件。你的應用程序應該處理播放器發送的錯誤事件。

這些就通過創建/註冊MediaError事件進行處理:

private void axWindowsMediaPlayer1_MediaError(object sender, AxWMPLib._WMPOCXEvents_MediaErrorEvent e) { 
      // Handle errors and profit! 
    } 

然後將這個選項設爲您的控制Events屬性窗口中的處理器 - 同其他事件,如ErrorEvent

+0

@abcdefghi - 編輯註冊表時可能會好,因爲它正在操作'Current_User'。如果沒有,您需要獲得管理員權限才能添加,但如果媒體播放器對話框沒有要求管理員權限,您應該沒問題。如果沒有 - 至少你可以用你自己的信息創建一個對話框。 – Matthew 2013-09-26 16:12:09

+0

你的回答[據說]信譽良好。而abcdefghi的問題並沒有真正相關。這是關於一個特殊的行爲不當過濾器,它會在不期望的地方彈出阻塞UI,並且有特殊的過濾器特定方法可以避免它:應用程序可以將其添加到過濾器的黑名單中,應用程序(不是WMP)可以拒絕這個組件根本不被使用,最後一個應用程序可能會使用一個鉤子來防止這種行爲。編輯與幫助WMP匹配文件和註冊在一起並沒有多大關係。 – 2013-10-01 14:45:42