Найти тему
Дмитрий Власов

Дорабатываем звуковой драйвер Dolby Home Theater

Добрый день. После моих манипуляций с ноутбуком у меня появился Dolby Home Theater. Штука классная. Звук становится громче и приятней. Но есть один неприятный нюанс, драйвер самопроизвольно выключается при запуске полноэкранных программ или при работе с микрофоном. Очень раздражает. Конечно можно свернуть программу и руками включить звук из контекстного меню, но через какое-то время он снова выключится. Ну что же, давайте его доработаем.

Для начала изучим пациента. Я попробовал пойти сразу в лоб и попытался открыть исполняемый файл архиватором 7zip, и он открыл его...

И судя по содержимому и названию рядом лежащих библиотек перед нами программа, написанная для .NET Framework. И это даёт нам шанс на задуманное. И что же можно сделать дальше, это ведь просто программа? Как ты её изменишь? И мой ответ - Легко! Потому, что программы, написанные на .NET можно декомпилировать. Это возможно благодаря архитектуре, лучше почитайте в интернете, как всё это интересно работает. В качестве декомпилятора мы будем использовать ILSpy. Открываем наш исполняемый файл в программе и вуоля!

-2

Исходники у нас на руках! Дальше можно пойти по двум путям:

  1. Переписать исходник через ILSpy
  2. Написать сервис для Windows

Я выбрал второй способ, так как он легче. Потому, что редактирование программы в ILSpy доступно только на уровне IL кода, а это сомнительное удовольствие. Ещё можно выгрузить полностью исходный код на C# или Basic, но он будет не полным и его придётся дописывать. Собственно, наш план таков, надо найти участок кода с инициализацией библиотеки, перенести в наш проект и делать проверки в бесконечном цикле на состояние драйвера. И при его выключении включать его. Конечно же в цикле сделать задержку потока. что бы не загружать ПК. И где же нам искать код? А вот где! Судя по библиотекам "PresentationFramework" и "PresentationCore" это WPF, а не Win Form. А примерное место кода я уже знаю, это пункт из контекстного меню на панели Windows.

-3

Значит ищем описание контекстного меню, это xaml файл, а оттуда переходим по событию OnClick.

-4

Вот и он, метод OnDolbyOn(). Всё становится понятно. Надо в нашем проекте создать объект Model и проверяя IsDolbyEnabled на false присваивать ему true. Вот вся логика.

-5

Вот такой простецкий код у меня получился. А дальше компиляция и в авто запуск. И теперь если наш драйвер решится выключиться, то наш сервис сразу же его включит.

Исходный код можно глянуть на GitHub.

Всего вам хорошего!