注意: 这个答案最初是为了回应一个赏金问题和编辑,该问题已被删除,关于如何通过代码执行此操作。其中的一部分仍然与原始问题相关。
如果您在需要编辑注册表时拥有管理员权限,则可以非常直接地执行此操作。不确定在没有管理员权限的情况下您能走多远并且可以稍后进行测试,但这里是如何通过代码执行此操作(在实际实现中,我会将此作为设置的一部分 - 或者每次检查密钥是否存在,这似乎很浪费):
您需要添加一个键(此处显示两个用于注册扩展,您可能需要其他键用于自动播放或播放器上的设置):
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
媒体播放器添加的内容,
- 选择一个疯狂的扩展,
- 出现提示时单击始终允许,然后
- 在注册表中搜索所有创建的键。
上面的代码已经过测试并且对我有用 - 在添加键之前确认对话框,之后确认没有任何对话框。
这是一个很好的通用过程,用于以编程方式将文件关联和默认程序从 .NET添加到Windows 注册表。如果扩展已经存在(TEST FOR THIS ) ,您必须小心注册扩展(我在上面设置的第一个键)。否则上面的代码会很高兴地覆盖你当前的值。您真正需要的是添加到:HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions
无论如何。仔细考虑,提前检查,并在您在注册表中发疯之前进行测试!
在使用它之前备份您的注册表也是一个好主意。
最后说明:一旦您单击始终允许,就错过了关于如何重现的问题:只需删除条目HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions
,瞧!
此答案假定您具有regedit
.
最后注#2:针对赏金中的问题的回应。其他错误可以通过设置告诉媒体播放器允许您处理错误事件然后编写您的自定义处理程序来抑制。我以前没有这样做过,所以不能评论通过这种方法可以/不能控制的易用性和什么。
Windows Media Player 控件在遇到诸如无效 URL 之类的错误时不会引发异常。相反,它标志着一个事件。您的应用程序应处理播放器发送的错误事件。
然后可以通过创建/注册MediaError
事件来处理这些:
private void axWindowsMediaPlayer1_MediaError(object sender, AxWMPLib._WMPOCXEvents_MediaErrorEvent e) {
// Handle errors and profit!
}
然后将其设置Events
为控件属性窗口中的处理程序 - 与其他事件相同,例如ErrorEvent
.