Подавлять сообщения от встроенного проигрывателя Windows Media

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

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

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

2 ответа

Решение

Расширение.ext (например) не известно медиапроигрывателю, поэтому предупреждение.

Чтобы изменить это, вы можете изменить реестр и зарегистрировать это расширение. Это официально описано здесь: Расширение имени файла Настройки реестра

Самый простой способ сделать это - создать раздел реестра следующим образом:

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

И добавьте два ключевых значения:

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

Это показано здесь:

ПРИМЕЧАНИЕ: этот ответ изначально был ответом на вопрос о вознаграждении и правке, который был удален, как это сделать с помощью кода. Части этого все еще имеют отношение к первоначальному вопросу.

Вы можете сделать это довольно просто, если у вас есть права администратора, так как вам нужно редактировать реестр. Не уверен, как далеко вы доберетесь без прав администратора и сможете проверить позже, но вот как это сделать с помощью кода (в реальной реализации я сделал бы это как часть установки - или проверил бы, существуют ли ключи каждый раз, что кажется расточительным):

Вам нужно добавить одну клавишу (здесь показаны две клавиши для регистрации расширений, вам могут понадобиться дополнительные клавиши для автоматического воспроизведения или настройки на плеере):

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 Media Player добавляет,

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам