2013-05-11 7 views
3

Я работаю над приложением Windows Form, в котором я встроил проигрыватель Windows Media Player, который позволяет воспроизводить видеофайлы. Единственное, что я изменил расширение медиафайлов (по причинам, по которым я не могу попасть сюда). Например, «xyz.wmv» можно назвать «xyz.ext». Они играют очень хорошо, но прежде чем они начнут играть, я получаю сообщение:Подавлять сообщения от встроенного медиаплеера Windows Media

«Файл, который вы пытаетесь воспроизвести, имеет расширение, которое не соответствует формату файла. Воспроизведение файла может привести к неожиданному поведению. проигрыватель, чтобы попытаться воспроизвести файл? "

Вы можете нажать «Да», и вы даже можете установить флажок, чтобы не показывать это сообщение еще раз, но я не хочу этого по всем очевидным причинам, включая тот факт, что он смущает пользователей. Я просмотрел свойства .settings, но я не могу найти способ подавить это сообщение и, что еще важнее, другие сообщения, которые могут возникнуть.

+0

ОК, я получил, как далеко этот код: Private Sub wmpPlayer_Warning (отправитель как объект, е как _WMPOCXEvents_WarningEvent) Ручки WMPlayer.Warning MsgBox (e.warningType.ToString) Но появляется сообщение, и этот код не будет достигнуто на всех ... End Sub Частная функция wmPlayer_Warning() As Object Throw New NotImplementedException Конечная функция – Chiwda

+0

@abcdefghi: вопрос о щедрости не связан. Спросите отдельно, чтобы получить ответ. –

+0

@ RomanR. Похоже, что для меня такой же вопрос, за исключением того, что он хочет обработать его в коде. Кроме того, ответ, который я дал, должен был решить, если я не перепутаю вопрос? Я согласен, что я бы повторно спросил и связался с этим вопросом, но щедрота уже установлена ​​... – Matthew

ответ

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

+0

Расширение уже зарегистрировано в моем приложении. Однако проигрыватель Windows Media встроен в мое приложение. Я передаю имя файла игроку, и это дает мне предупреждение, описанное выше. Очевидно, я не хочу регистрировать расширение в двух местах ... – Chiwda

+0

С моим ответом у меня больше нет предупреждений со встроенным медиаплеером, попробовали ли вы его? –

+0

Я уверен, что вы правы в том, что сообщение исчезнет. И спасибо за это решение. Однако есть две проблемы. Во-первых, я не знаю, влияет ли и как это повлияет на мою ассоциацию файлов, зарегистрированную в моем приложении. Во-вторых, я хочу найти общий ответ, чтобы я мог управлять предупреждениями и ошибками в целом. Я, конечно же, попробую ваше решение, но я не хочу спешить в реестр - он всегда создает Fear & Dread для меня. :-) – Chiwda

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

Если вы хотите увидеть всеMedia Player добавляет

  1. выбрать сумасшедшее расширение,
  2. нажмите всегда позволяет при запросе и затем
  3. поиска в реестре для всех ключей, создаваемых в.

Вышеприведенный код проверен и работает для меня - подтверждение диалога перед добавлением ключей и отсутствие какого-либо диалога после.

Это хороший общий процесс для программного добавления ассоциаций файлов и программ по умолчанию в Реестр Windows из .NET. Вы должны быть осторожны при регистрации расширения (первый ключ, который я установил выше) IF расширение уже существует (ИСПЫТАНИЕ НА ЭТО). В противном случае вышеуказанный код с радостью перезапишет ваши текущие значения. Все, что вам действительно нужно, это тот, который добавлен в: HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions в любом случае. Подумайте об этом, проверьте заранее и проверьте, прежде чем сходить с ума в реестр!

Это всегда отличная идея для резервного копирования реестра перед тем, как играть с ним.

Конечная нота: пропустил ваш вопрос о том, как воспроизвести, как только вы нажали всегда позволяют: просто удалить запись в HKEY_Current_User.Software.Microsoft.MediaPlayer.Player.Extensions и вуаля!

Этот ответ предполагает, что у вас есть рабочее знание regedit.

Заключительная записка # 2: Ответ, связанный с вопросами в Bounty. Другие ошибки можно подавить, установив команду Media Player, чтобы вы могли обрабатывать события ошибок, а затем записывать свой собственный обработчик. Я не делал этого раньше, поэтому не могу прокомментировать легкость и что можно/не может контролировать через этот method.

Элемент управления проигрывателем Windows Media не вызывает исключения при обнаружении ошибки, такой как неверный URL-адрес. Вместо этого он сигнализирует о событии. Ваше приложение должно обрабатывать события ошибок, отправленные игроком.

Они могут быть обработаны путем создания/регистрации MediaError событие:

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

Затем установите его в качестве обработчика в окне Events свойств для элемента управления - то же для других событий, таких как ErrorEvent.

+0

@abcdefghi - Возможно, вы можете редактировать реестр, поскольку он манипулирует «Current_User». Если нет, вам нужно будет добавить админы администратора, но если диалог с медиа-плеером работал без запроса прав администратора, вы должны быть в порядке. Если нет - по крайней мере, вы сможете создать диалог со своим собственным сообщением. – Matthew

+0

Ваш ответ [якобы] в хорошем состоянии. И вопрос абкофджи не был действительно связан. Речь шла о специальном случае неправильного фильтра, который всплывает, блокируя пользовательский интерфейс, где его не ожидали, и есть специальные способы, специфичные для фильтра, чтобы его избежать: приложение может добавить его в черный список фильтра, приложение (а не WMP, хотя) может отклонить этот компонент не будет использоваться вообще, наконец, приложение может использовать крючок для предотвращения такого поведения. Редактирование не очень сильно помогло помочь файлу совпадения и регистрации WMP вместе. –