3

我正在开发一个 Windows 窗体应用程序,其中嵌入了一个 Windows Media Player,可以让您播放视频文件。独特之处在于我更改了媒体文件的扩展名(由于我无法进入这里的原因)。例如,“xyz.wmv”可能被称为“xyz.ext”。他们玩得很好,但在他们玩之前,我收到了这样的信息:

“您尝试播放的文件的扩展名与文件格式不匹配。播放该文件可能会导致意外行为。您希望播放器尝试播放该文件吗?”

您可以单击“是”,甚至可以选中该框以不再显示该消息,但出于所有明显的原因,包括它使用户感到困惑的事实,我不希望这样做。我查看了 .settings 属性,但我找不到抑制此消息的方法,更重要的是,可能会出现其他消息。

4

2 回答 2

3

媒体播放器不知道 .ext(例如)扩展名,因此会发出警告。

您可以做的更改是修改注册表并注册此扩展。这在这里正式描述:文件名扩展名注册表设置

最简单的方法是创建一个这样的注册表项:

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

并添加两个键值:

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

这显示在这里:

在此处输入图像描述

于 2013-05-13T09:12:39.890 回答
0

注意: 这个答案最初是为了回应一个赏金问题和编辑,该问题已被删除,关于如何通过代码执行此操作。其中的一部分仍然与原始问题相关。

如果您在需要编辑注册表时拥有管理员权限,则可以非常直接地执行此操作。不确定在没有管理员权限的情况下您能走多远并且可以稍后进行测试,但这里是如何通过代码执行此操作(在实际实现中,我会将此作为设置的一部分 - 或者每次检查密钥是否存在,这似乎很浪费):

您需要添加一个键(此处显示两个用于注册扩展,您可能需要其他键用于自动播放或播放器上的设置):

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媒体播放器添加的内容,

  1. 选择一个疯狂的扩展,
  2. 出现提示时单击始终允许,然后
  3. 在注册表中搜索所有创建的键。

上面的代码已经过测试并且对我有用 - 在添加键之前确认对话框,之后确认没有任何对话框。

这是一个很好的通用过程,用于以编程方式将文件关联和默认程序从 .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.

于 2013-09-26T16:09:53.447 回答