Добрый день. После моих манипуляций с ноутбуком у меня появился Dolby Home Theater. Штука классная. Звук становится громче и приятней. Но есть один неприятный нюанс, драйвер самопроизвольно выключается при запуске полноэкранных программ или при работе с микрофоном. Очень раздражает. Конечно можно свернуть программу и руками включить звук из контекстного меню, но через какое-то время он снова выключится. Ну что же, давайте его доработаем.
Для начала изучим пациента. Я попробовал пойти сразу в лоб и попытался открыть исполняемый файл архиватором 7zip, и он открыл его...
И судя по содержимому и названию рядом лежащих библиотек перед нами программа, написанная для .NET Framework. И это даёт нам шанс на задуманное. И что же можно сделать дальше, это ведь просто программа? Как ты её изменишь? И мой ответ - Легко! Потому, что программы, написанные на .NET можно декомпилировать. Это возможно благодаря архитектуре, лучше почитайте в интернете, как всё это интересно работает. В качестве декомпилятора мы будем использовать ILSpy. Открываем наш исполняемый файл в программе и вуоля!
Исходники у нас на руках! Дальше можно пойти по двум путям:
- Переписать исходник через ILSpy
- Написать сервис для Windows
Я выбрал второй способ, так как он легче. Потому, что редактирование программы в ILSpy доступно только на уровне IL кода, а это сомнительное удовольствие. Ещё можно выгрузить полностью исходный код на C# или Basic, но он будет не полным и его придётся дописывать. Собственно, наш план таков, надо найти участок кода с инициализацией библиотеки, перенести в наш проект и делать проверки в бесконечном цикле на состояние драйвера. И при его выключении включать его. Конечно же в цикле сделать задержку потока. что бы не загружать ПК. И где же нам искать код? А вот где! Судя по библиотекам "PresentationFramework" и "PresentationCore" это WPF, а не Win Form. А примерное место кода я уже знаю, это пункт из контекстного меню на панели Windows.
Значит ищем описание контекстного меню, это xaml файл, а оттуда переходим по событию OnClick.
Вот и он, метод OnDolbyOn(). Всё становится понятно. Надо в нашем проекте создать объект Model и проверяя IsDolbyEnabled на false присваивать ему true. Вот вся логика.
Вот такой простецкий код у меня получился. А дальше компиляция и в авто запуск. И теперь если наш драйвер решится выключиться, то наш сервис сразу же его включит.
Исходный код можно глянуть на GitHub.
Всего вам хорошего!