我正在开发一个Windows窗体应用程序,其中嵌入了一个允许您播放视频文件的Windows Media Player。唯一的事情是我更改了媒体文件的扩展名(由于我无法进入此处的原因)。例如,“xyz.wmv”可能被称为“xyz.ext”。他们玩的很好,但在他们玩之前,我收到了消息:
“您尝试播放的文件的扩展名与文件格式不符。播放该文件可能会导致意外行为。您是否希望播放器尝试播放该文件?”
您可以单击是,您甚至可以选中该框以不再显示该消息,但我不希望出于所有明显的原因,包括它使用户感到困惑。我查看了.settings属性,但我找不到抑制此消息的方法,更重要的是可能会出现其他消息。
答案 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)
此处显示:
答案 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
媒体播放器添加,
以上代码经过测试并为我工作 - 在添加密钥之前确认对话框,之后没有任何对话框。
这是一个很好的通用流程,用于以编程方式将文件关联和默认程序添加到.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
等其他事件相同。