注意:這個答案最初是爲了迴應一個賞金問題,並編輯刪除了如何通過代碼做到這一點。這部分與原始問題仍然有關。
你可以做到這一點非常簡單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的補充,
- 選擇一個瘋狂的擴展,促使然後
- 在註冊表中搜索該得到創建的所有密鑰時
- 點擊始終允許。
上面的代碼已經過測試和爲我工作 - 在添加按鍵之前確認對話框,之後缺少任何對話框。
這是一個很好的通用過程,用於以編程方式將文件關聯和默認程序添加到.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
。
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
@abcdefghi:賞金問題是無關的。分別詢問以獲得答案。 – 2013-09-27 15:28:01
@RomanR。看起來和我的問題幾乎相同,只是他想用代碼來處理它。另外 - 我給出的答案應該已經解決了,除非我錯誤地解決了這個問題?我同意我會重新提出並鏈接到這個問題,但賞金已經設定... – Matthew 2013-09-27 16:37:19