禁止来自嵌入式Windows Media PLayer的消息

时间:2013-05-11 11:23:39

标签: vb.net com ocx wmp embedded-control

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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";
}

Media Player在您通过对话框添加时会创建其他键,但唯一需要的是:HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions

如果您想查看所有keys媒体播放器添加,

  1. 选择一个疯狂的扩展,
  2. 在提示时单击始终允许,然后
  3. 在注册表中搜索所有已创建的密钥。
  4. 以上代码经过测试并为我工作 - 在添加密钥之前确认对话框,之后没有任何对话框。

    这是一个很好的通用流程,用于以编程方式将文件关联和默认程序添加到.NET的 Windows注册表。您必须注意注册扩展名(我在上面设置的第一个键) IF 扩展名已经存在( TEST FOR THIS )。否则,上面的代码将很乐意覆盖您当前的值。你真正需要的只是添加到:HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions的那个。仔细考虑,提前检查,并在注册表中疯狂之前进行测试!

    在使用注册表之前备份注册表总是一个好主意。

    最后的注意事项:一旦点击总是允许,就错过了关于如何重现的问题:只需删除HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions中的条目即可!

    此答案假设您具有regedit的工作知识。

    最终说明#2 :针对Bounty中的问题做出回应。通过设置告诉Media Player允许您处理错误事件然后编写自定义处理程序,可以抑制其他错误。我之前没有这样做过,所以不能通过这个method对易用性和可以/不能控制的内容进行评论。

      

    Windows Media Player控件在遇到诸如无效URL之类的错误时不会引发异常。相反,它标志着一个事件。您的应用程序应该处理播放器发送的错误事件。

    然后可以通过创建/注册MediaError事件来处理这些事件:

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

    然后将此设置为控件的Events属性窗口中的处理程序 - 与ErrorEvent等其他事件相同。