Как «Усиление микрофона» включить программно

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 06.09.2016 (Вт) 10:01

Суть проблемы в следующем: на работе компьютерный класс, работает учебная программа, используется микрофон. Система Windows XP SP3 chip 2011 г. Вдруг студенты начинают жаловаться на плохую слышимость. Лезу в настройки, а там «Усиление микрофона», которое раннее было включено, почему-то самопроизвольно выключается. От этого и слышимость падает в разы. Почему так происходит, непонятно. Искал ответ в Инете ничего не нашел. Подскажите, как можно включать эту функцию программно? Может как-то через реестр?.. Может какое-то другое решение проблемы... подскажите.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 07.09.2016 (Ср) 17:49

Если ищется ключ в реестре, то он может быть относительно легко найден самостоятельно с помощью RegMon'а.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как «Усиление микрофона» включить программно

Сообщение ger_kar » 07.09.2016 (Ср) 19:57

Я смотрел (только использовал RegSnap для этих целей).
Модифицируются следующие ключи реестра
Код: Выделить всё
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0005\GlobalSettings\RearLineIn\Node002]
"Chan000"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{6994AD04-93EF-11D0-A3CC-00A0C9223196}\##?#HDAUDIO#FUNC_01&VEN_11D4&DEV_1986&SUBSYS_1043818F&REV_1005#4&3057F9B4&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#RearLineInWave\Device Parameters\Mixer\       5\Controls\       1]
"Channel       0"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0005\GlobalSettings\RearLineIn\Node002]
"Chan000"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{6994AD04-93EF-11D0-A3CC-00A0C9223196}\##?#HDAUDIO#FUNC_01&VEN_11D4&DEV_1986&SUBSYS_1043818F&REV_1005#4&3057F9B4&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#RearLineInWave\Device Parameters\Mixer\       5\Controls\       1]
"Channel       0"=dword:00000001

Только вот изменение этих ключей напрямую в реестре на саму настройку никак не влияет.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 08.09.2016 (Чт) 9:00

ger_kar писал(а):Только вот изменение этих ключей напрямую в реестре на саму настройку никак не влияет.

Всё правильно — ибо нефиг.

Пять минут в отладчике, и выясняется, что за установку и сброс этой опции отвечает API-функция mixerSetControlDetails — её и нужно использовать.

Кстати:
Vova_2581 писал(а):Лезу в настройки, а там «Усиление микрофона», которое раннее было включено, почему-то самопроизвольно выключается.

А это может происходить из-за Скайпа или чего-нибудь подобного, то есть софта, который имеет обыкновение переключать системные настройки звука (Скайп это активно делает).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 08.09.2016 (Чт) 12:04

ger_kar писал(а):Только вот изменение этих ключей напрямую в реестре на саму настройку никак не влияет

А где же тогда система хранит данные о параметрах настройки???

Хакер писал(а):за установку и сброс этой опции отвечает API-функция mixerSetControlDetails — её и нужно использовать

Спасибо за подсказку, попытаюсь разобраться.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как «Усиление микрофона» включить программно

Сообщение ger_kar » 08.09.2016 (Чт) 16:36

Vova_2581 писал(а):А где же тогда система хранит данные о параметрах настройки???
Ну хранит то она их в реестре, в тех самых ключах, которые я указал. Но система же их там просто хранит, если систему например перезагрузить, то при новой загрузке она считает данные ключа и установит нужные параметры согласно настройке. А при работе она использует то значение, которое загрузилось и поэтому если его просто поменять в реестре, то ровным счетом ничего не изменится, до следующей перезагрузки.
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 08.09.2016 (Чт) 18:19

ger_kar писал(а):Ну хранит то она их в реестре, в тех самых ключах, которые я указал. ....до следующей перезагрузки.


Вопрос первый: наверное, Вы ошиблись... это какие-то другие ключи должны быть??? Дело в том, что я скопировал Ваши ключи реестра из примера в созданный REG-файл и запускал его меняя настройки. Менял значения с dword:00000001 на dword:00000000 и обратно, перезагружал комп по нескольку раз - все бестолку, ничего не меняется! Причем у меня стоит в настройках ориентир на звуковую карту PCI, менял настройки со звуковой карты на встроенный звуковой кодек WAVE на материнке, проделывал все тоже самое, что описал выше с реестром – ничего вообще не меняется! По крайней мере у меня так... Может быть Вы ошиблись??

Второй вопрос: что установить в RegMon’e так, чтобы он отфильтровывал только то, что мне нужно, а именно обращение в реестр того окна, где меняется это самое «Усиление микрофона»?? Без фильтра отловить нереально.

Вопрос третий: смотрел примеры использования функции mixerSetControlDetails. Мммда... разобраться довольно сложно, ну мне как не программисту по специальности по крайней мере. Все примеры нацелены в основном на общие настройки громкости, а тут нужно попасть именно на настройки «Запись», но и это еще не все... «Усиление микрофона» относится к дополнительным настройкам – вот как туда еще попасть??? Вообще не понятно. Ни одного примера не нахожу, только одни намеки. Вроде как на тип MIXERLINE_COMPONENTTYPE_DST_WAVEIN нужно использовать, но как?? И то, как мне кажется, это не даст доступ к дополнительным настройкам. Как к ним добраться??? Хотя бы один пример??
Последний раз редактировалось Vova_2581 08.09.2016 (Чт) 18:28, всего редактировалось 1 раз.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как «Усиление микрофона» включить программно

Сообщение ger_kar » 08.09.2016 (Чт) 18:27

Vova_2581 писал(а):Вопрос первый: наверное, Вы ошиблись... это какие-то другие ключи должны быть??? Дело в том, что я скопировал Ваши ключи реестра из примера в созданный REG-файл.
В ключах используются данные оборудования, соответственно они валидны только для моего компа. Возможно также, что они еще и от системы зависят (у меня Windows XP SP3). Да и вообще это тупиковый путь. Нужно идти правильной дорогой, которую показал Хакер
Бороться и искать, найти и перепрятать

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 08.09.2016 (Чт) 18:31

Ну тогда для меня и это тупик. :((((( Даже и не знаю, что делать?

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Как «Усиление микрофона» включить программно

Сообщение ALX_2002 » 09.09.2016 (Пт) 16:09

Vova_2581 писал(а):Ну тогда для меня и это тупик. :((((( Даже и не знаю, что делать?


Vova_2581, а что мешает обратиться к великому ГУГЛУ и спросить его о примерах использования этой функции ?

Пример запроса в гугле: клик

Результаты поиска:

1) пример 1

2) пример 2

3) пример 3

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как «Усиление микрофона» включить программно

Сообщение alibek » 09.09.2016 (Пт) 17:22

Vova_2581 писал(а):Даже и не знаю, что делать?

Перечитать это сообщение.
Повторять до понимания.
Lasciate ogni speranza, voi ch'entrate.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Как «Усиление микрофона» включить программно

Сообщение bon818 » 09.09.2016 (Пт) 21:23

Найти пример отключения звука, это не проблема.
И заполнить структуру MIXERLINE structure https://msdn.microsoft.com/en-us/library/windows/desktop/dd757305(v=vs.85).aspx
нужными флагами.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 10.09.2016 (Сб) 23:29

ALX_2002

Пример 1
Этот пример опять-таки демонстрирует управление ОСНОВНЫМИ настройками громкости и микрофона и никак не влияет на ДОПОЛНИТЕЛЬНУЮ настройку «Усиление микрофона» (а именно она мне и нужна!!!), поэтому не годиться. Причем, что интересно: этот пример работает только(!) со звуковой платой! Когда я переключился на внутренний звуковой кодек AC'97 WAVE (а именно так в компьютерном классе), переключил гарнитуру на этот кодек и проверил работу микрофона и наушников, то проблем не было – гарнитура работала, но(!) данный пример работать уже перестал. Ничего вообще не регулировалось! Я уже запускал, перезапускал... крутил-мутил – все бестолку НЕ РАБОТАЕТ! :?

Пример 2
Снова тоже самое... ОСНОВНАЯ громкость. Не годиться.

Пример 3
Ну, это просто модуль... Я его, конечно, подключил к проекту, там в принципе все тоже самое, что я и описал выше... Я так понял, не знаю, правильно или нет, что в этом модуле нужно использовать функцию SetVolumeControl, а в качестве параметра передать структуру, где и будет флаг дополнительной функции «Усиление микрофона». Но я не могу понять, где этот самый флаг в этих всех структурах??? Ходят слухи... что его никто никогда не видел, но он же, сука, где-то есть! :)))))))))))

alibek
Я читал сообщение Хакера, только причем тут понимание??? Дай мне «ФЛАГ» в руки и толкни навстречу поезду! Век буду помнить твою доброту!! :))

bon818
bon818 писал(а):Найти пример отключения звука, это не проблема.

Мне нужно не отключать звук, а ВКЛЮЧАТЬ усилитель микрофона!

Код: Выделить всё
Private Type MIXERLINE
cbStruct As Long
dwDestination As Long
dwSource As Long
dwLineID As Long
fdwLine As Long
dwUser As Long
dwComponentType As Long
cChannels As Long
cConnections As Long
cControls As Long
szShortName As String * MIXER_SHORT_NAME_CHARS
szName As String * MIXER_LONG_NAME_CHARS
dwType As Long
dwDeviceID As Long
wMid As Integer
wPid As Integer
vDriverVersion As Long
szPname As String * MAXPNAMELEN
End Type


И где этот флаг здесь???

HELP ME!!! Как мне включать этот долбаный усилитель??? Ладно я любитель... но вы же тут все гипер-сверх-мега Хакеры! Вам помочь, как два пальца намочить! Подскажите... А еще лучше с примером... и я буду молиться Аллаху, чтобы он воздал Вам... за вашу доброту! :))

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 11.09.2016 (Вс) 2:30

Vova_2581 писал(а):Я читал сообщение Хакера, только причем тут понимание???

При том, что нужно включить голову, выключить лень и пойти читать документацию. Которая описывает идеологию.

Идеология микшеров в Windows выглядит так, если рассказывать кратко:

В системе есть один или несколько объектов-микшеров (как правило — несколько). Каждый объект-микшер олицетворяет аудиоустройство.
У каждого микшера есть набор линий — как минимум одна, но может быть весьма много. Линии делятся по типу на destination (как бы выходы сигнала из микшера куда-то в иное место) и source (входы сигналов из внешнего мира (или другого устройства) в микшер. Между destination и source линиями существует примитивная маршрутизация сигналов и соответствующая иерархия (каждой destination линии принадлежит ряд source-линий, которые подают на destination-линию сигнал (который суммируется со всех source-линий)).
У каждой линии есть набор controls (переведём это как «органов управления»). Control, он же орган управления, это виртуальный фейдер (ползунок), крутилка, переключатель, индикатор и тому подобное. У разных линий одного конкретно взятого микшера могут быть совершенно разный набор этих control-ов. У некоторых линий может быть вообще не быть control-ов.

Управление усилением микрофона как раз представлено изнутри как некий виртуальный control-переключатель, который может быть во включенном либо выключенном положении.

Программисту позволяется взять любой микшер из тех, кто есть в системе, у этого микшера взять любую линию, у этой линии взять любой control и либо получить его значение, либо задать новое собственное.

Иерархия получается такой: Система → Микшер → Линия → Контрол.
Другими словами:
Код: Выделить всё
Система
   Микшер 1
      Линия 1
         Control 1
         Control 2
         ...
         Control N
      Линия 2
         Control 1
         ...
         Control N
      ...
      Линия N
   Микшер 2
   ...
   Микшер N


Значит, чтобы включать или выключить усиление микрофона, аналогично тому, как пользователь может это сделать через sndvol32.exe, твоя программа должна узнать количество микшеров в системе (с помощью mixerGetNumDevs), перебрать их все и найти среди них нужный (по позиции или по паре VID+PID или ещё как-либо). Открыть нужный микшер (с помощью mixerOpen), получить информацию о количестве линий в нём (с помощью mixerGetDevCaps), перебрать все линии нужного микшера, получая информацию о каждой из них (с помощью mixerGetLineInfo), и среди всех линий найти нужную — то есть ту, которая отвечает за микрофон. Далее нужно узнать, сколько control-ов поддерживает эта микрофонная линия микшера (эту информацию нам уже дала mixerGetLineInfo). Нужно получить информацию о всех контролах это микрофонной линии (с помощью mixerGetLineControls), перебрать их все и найти среди них control, который отвечает за вожделенное усиление. Быть может, что на какой-то машине будет стоять звуковая карта, которая не поддерживает это усиление, и такого control-а не будет вообще. Но если такой control перебором удалось найти, то остаётся поменять его значение на нужное с помощью mixerSetControlDetails.

Когда я говорю «перебрать и найти нужный», можно действительно так делать, или альтернативно, можно вызывать функцию mixerGetLineInfo с флагом MIXER_GETLINEINFOF_COMPONENTTYPE и функцию mixerGetLineControls с флагом MIXER_GETLINECONTROLSF_ONEBYTYPE — тогда не нужно будет перебирать все линии микшер в поисках микрофонной линии и всех контролы линии в поисках переключателя усилиения, это сделает за нас система. Но запросто может оказаться, что не сделает, если в системе окажется несколько микрофонов, или драйвер неправильно сообщает системе тип микшерной линии, или у микрофонной линии будет несколько контролов типа «переключатель». Так что лучше перебирать самому и иметь в коде алгоритм, который сам более продвинутым путём анализирует, та ли это линия микшера из всех прочих линий, и тот ли это контрол микрофонной линии из прочих, и есть ли тут вообще нужный.

Никаких примеров выше я не смотрел. Про какой флаг ты спрашиваешь, я понятия не имею.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TheWatcher
Новичок
Новичок
Аватара пользователя
 
Сообщения: 29
Зарегистрирован: 27.08.2012 (Пн) 0:53
Откуда: Республика Беларусь

Re: Как «Усиление микрофона» включить программно

Сообщение TheWatcher » 11.09.2016 (Вс) 20:13

Хакер, как всегда, абсолютно прав. :)

Только иерархически, только перебором и только помолясь, чтобы в системе не было взаимно конфликтующих аудио драйверов, которые быстро накапливаются в результате экспериментирования со скачиванием из сети. Даже будучи отключенными в конкретной конфигурации, они могут искажать кажущуюся картину реального аудио-стека. Во многих писишках Intel HD Audio уже изначально соседствует с AC97, что уже само по себе намекает.

Обойтись одной, простой и понятной функцией не удастся. Только иерархический перебор с, увы, негарантированным итогом.
TheWatcher
=========
3.6GHz Core i5-3470, 16GB RAM / GTX 1060, 6GB VRAM
x86 Win XP Pro Sp3 / x64 Win 7 Ult Sp1 / x64 Ubuntu 16.04

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 12.09.2016 (Пн) 10:46

Хакер
Ну прямо целая лекция. Хорошо, я понял, спасибо...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 14.09.2016 (Ср) 12:28

Кстати, давно хочу написать замену стандартному микшеру. Он меня не устраивает целым списком недостатков:
  • Чрезвычайно широкие каналы: при большом числе линий окно микшера может не умещаться на экране.
  • Невозможно одновременное отображение каналов записи и воспроизведения: чтобы подрегулировать уровень записи или переключиться с записи с линейного входа на запись с микрофона, нужно лезть в меню, потом в диалог, выбирать там нужное, а потом точно так же возвразаться на исходный микшер.
  • Нет шорткатов для возвращения баланса в нейтральное положение.
  • Нет пресетов/запомнаемых состояний.

Попробую сегодня вечерком сесть и написать замену, если не брошу — выложу сюда.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Как «Усиление микрофона» включить программно

Сообщение Proxy » 14.09.2016 (Ср) 14:59

Хакер писал(а):при большом числе линий окно микшера может не умещаться на экране.

Горизонтальная полоса прокрутки появляется. Неудобно — факт.
Хакер писал(а):Нет шорткатов для возвращения баланса в нейтральное положение.

Ещё с Vista появился общий для устройства ползунок и отдельные для приложений. Так вот, если сдвинуть ползунок у какого-то приложения, то вернуть обратно на старое положение практически не реально. Почти нельзя выровнять ползунки всех приложений в один уровень, во всяком случае это сделать сложно. Если опустить общий ползунок в 0 и поднять, то пропорция всё равно сохранится. Если случайно поднял один ползунок выше общего уровня, то общий уровень поднимется, но обратного действия нет (все приложения окажутся не в 100% от общего уровня, придется поднимать каждый ползунок индивидуально). Общее впечатление такое: разрабатывали в спешке, неудовлетворительно тестировали.
А вот общего микшера для всех устройств в Windows 8.1 не наблюдаю, похоже тоже с Vista начиная исчез (и вот зря).
Сам привык пользоваться mkey (вынес нужное на горячие клавиши).

Я бы ещё добавил в минусы: нету интерфейса командной строки у микшера.
Последний раз редактировалось Proxy 14.09.2016 (Ср) 15:06, всего редактировалось 1 раз.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как «Усиление микрофона» включить программно

Сообщение Mikle » 14.09.2016 (Ср) 15:04

Хакер писал(а):Кстати, давно хочу написать замену стандартному микшеру.

Если он сможет работать и под Win Vista-10, то будет вообще отлично. Proxy верно изложил ситуацию, убили микшер.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 26.09.2016 (Пн) 13:43

Короче, разбирался, я разбирался с этой всей чухнёй и что в итоге... а в итоге споткнулся об объекты-микшера, причем два раза! Упал, ударился коленкой, запутался в линиях и на последок засыпался контролами. :)))
Не, думаю, умный в гору не пойдет... Я эту гору обошел. Вот таким вот образом...
Код: Выделить всё
'Для работы кода нужно открыть новый проект и поместить на нее кнопку Command1
'Далее заходим в меню "Пуск" - "Панель управления" - "Звуки и аудиоустройства" - "Речь"
'Там, где микрофон... нажимаем "Громкость", появляется окно "Уровень записи",
'нажимаем меню "Параметры" и кликаем по "Дополнительные параметры". В линии "Микрофон"
'появиться кнопка "Настройка" - именно она нам и будет нужна, чтобы работал данный код
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const SW_HIDE = 0
Const BM_GETCHECK = &HF0
Const BM_CLICK = &HF5
Const WM_CLOSE = &H10
'Const BM_SETCHECK = &HF1

Private Sub Command1_Click()
'rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3 - Windows XP апплет Звуки и аудиоустройства (вкладка Речь)
Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3" 'Вызываем нужный апплет

Dim hHostWindow As Long
Dim hSpeech As Long
Dim hVolume As Long
hHostWindow = FindWindow("#32770", "Свойства: Звуки и аудиоустройства") 'Находим хэндл главного окна
'ShowWindow hHostWindow, SW_HIDE                                        'Можно скрыть, если не надо.
hSpeech = FindWindowEx(hHostWindow, 0&, "#32770", "Речь")               'Переходим во вкладку "Речь"
hVolume = FindWindowEx(hSpeech, 0&, "Button", "Гро&мкость...")          'Находим кнопку "Громкость" в микрофонных настройках
SendMessage hVolume, BM_CLICK, 0&, 0&                                   'И посылаем КЛИК кнопке (появиться окно "Уровень записи")

DoEvents  'Так... на всякий случай, можно не использовать.
Sleep 700 'Чтобы появилось окно "Дополнительные параметры..." нужно здесь установить время задержки,
          'чтобы система завершила какие-то свои внутренние операции...
          'Если этого не сделать, или установить недостаточное время, окно просто не появиться. :(
          'Это значение может меняться в зависимости от скорости работы процессора.
          'Подбирается индивидуально... можно нечто среднее...
          'А можно оставить 700 мсек, если ваш комп и так быстрый.

Dim hHostWindowTwo As Long
Dim hSetting1 As Long
Dim hSetting2 As Long
hHostWindowTwo = FindWindow("Volume Control", vbNullString)                 'Находим хэндл окна "Уровень записи"
hSetting1 = FindWindowEx(hHostWindowTwo, 0&, "Button", "&Настройка")
hSetting2 = FindWindowEx(hHostWindowTwo, hSetting1, "Button", "&Настройка") 'Переходим на кнопку "Настройка",
                                                                            'которую мы заранее включили в параметрах,
                                                                            'чтобы она отображалась!!!
'ShowWindow hHostWindowTwo, SW_HIDE                                         'Окно можно скрыть, если не надо.
PostMessage hSetting2, BM_CLICK, 0&, 0&                                     'И посылаем КЛИК кнопке
                                                                            '(появиться окно "Дополнительные параметры...")

DoEvents
Sleep 700 'Еще одна необходимая задержка, иначе ничего не получится.

Dim hHostWindowTree As Long
Dim hmic_gain As Long
hHostWindowTree = FindWindow("#32770", "Дополнительные параметры: Микрофон")       'Находим хэндл окна "Дополнительные параметры..."

If hHostWindowTree = 0 Then                                                        'Если окно называется по-другому...
hHostWindowTree = FindWindow("#32770", "Дополнительные параметры: Mic")
hmic_gain = FindWindowEx(hHostWindowTree, 0&, "Button", "&1  20dB boost")         'Могут быть разные варианты,
ElseIf hHostWindowTree = 0 Then                                                    'зависит от драйверов на звук
hHostWindowTree = FindWindow("#32770", "Дополнительные параметры: Микрофон")
hmic_gain = FindWindowEx(hHostWindowTree, 0&, "Button", "&1  Mic Boost")
Else
hmic_gain = FindWindowEx(hHostWindowTree, 0&, "Button", "&1  Усиление микрофона") 'Находим нужный нам CheckBox
End If

Dim chkState As Long
chkState = SendMessage(hmic_gain, BM_GETCHECK, 0&, 0&)                             'Получаем текущее состояние CheckBox
If chkState = 0 Then
PostMessage hmic_gain, BM_CLICK, 0&, 0&                                           'Если бит не установлен, то устанавливаем его...
                                                                                   'Сообщение BM_SETCHECK здесь не катит...
                                                                                   'нужно передавать именно КЛИК!
                                                                                   'Тогда параметр применяется, иначе нет!
MsgBox "Усиление микрофона включено программно", vbInformation
Else
MsgBox "Бит усиления микрофона уже установлен", vbInformation
End If

SendMessage hHostWindowTree, WM_CLOSE, 0&, 0&                                      'И закрываем все окна...
SendMessage hHostWindowTwo, WM_CLOSE, 0&, 0&
SendMessage hHostWindow, WM_CLOSE, 0&, 0&
End Sub

Там в коде комментарии... У меня все работает! Видео в доказательство...
Конечно, в каждой системе настройки звука отображаются по-разному, зависит от драйверов, видимо, но код легко адаптировать под любые условия. Так что свою проблему я решил. А мне тут: «иди в дремучий лес в заколдованной долине... там пройдешь через болото в горы и по обрыву вверх спустишься вниз... тамоче счастье твое в пещере черной пречерной сидит» - не, ребята, такой вариант мне не катит. :)))))
Вложения
Project003.rar
Как все работает...
(1.6 МиБ) Скачиваний: 211

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 26.09.2016 (Пн) 13:43

Хакер
Сделал заяву на новый микшер. Весь МИР ждёт... и даже программисты MicroSoft застыли в ожидании чуда! И где???.. Я чета не пойму... Лень - мать всех пороков??!!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 26.09.2016 (Пн) 18:39

Обещал и прямо в тот же день сделал большую часть.

У меня микшер стилизованный, у него там нестандартный интерфейс, кастомные элементы управления, отрисовка с альфа-каналом. Кое-какие иконки рисовать надо. Вот на этом я приостановил разработку (да и думал, что уже никому не нужно, все забыли).

Пока занимаюсь с утра до ночи непрограммистскими делами.

Хотел, было, сейчас выложить скриншот того, что есть, но не буду раньше времени раскрывать внешний вид — пусть первое впечатление будет не испорчено недоделками.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 26.09.2016 (Пн) 18:49

А что касается способа решения — конечно это дурной метод. На англоязычной системе или системе, где редактором ресурсов подправили стандартный sndvol32.exe всё это работать не будет. Да и помимо дурного подхода, можно было придерживаясь этого подхода сделать в рамках его парадигмы всё красиво и правильно. А Sleep 700 — это что-то далёкое от понятия «красиво и правильно». Почему не использовать SendMessageTimeout/WaitForInputIdle?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 28.09.2016 (Ср) 11:45

Хакер писал(а):А что касается способа решения — конечно это дурной метод.

Вот все тебе не угодишь.
Хакер писал(а):У меня микшер стилизованный, у него там нестандартный интерфейс, кастомные элементы управления, отрисовка с альфа-каналом. Кое-какие иконки рисовать надо. Вот на этом я приостановил разработку (да и думал, что уже никому не нужно, все забыли).

Вот это интересно будет посмотреть! И никто ничего не забыл, будет время доделывай конечно. Что значит "не нужно..."?? У меня на работе этот микшер постоянно дергается. Как я уже говорил, у нас учебная программа работает, компьютеры (больше 40...) в разных залах стоят и это только на одном комплексе, а их два! Связь через микрофоны, динамики, гарнитуру идет. Так вот, постоянно дергают... то добавь звук, то убавь... а то кое-где "микрофонный эффект" появляется и прочие проблемы с этим же усилением микрофона... как я и говорил. Ну короче, мы постоянно периодически вызываем sndvol32.exe и крутим-мутим все эти настройки. Так что удобный микшер очень даже нужно! Если сделаешь, так чтобы там все вместе было в одной панели и "Воспроизведение" и "Запись", как ты писал... то мы его задействуем у нас. Только не знаю, как в плане совместимости будет? У нас везде Windows XP стоит и все программы именно под XP написаны. Вопрос подымался, конечно, чтобы на Win10 перейти, но тогда ведь нужно все переделывать уже под новую систему, а это наши программисты на кафедре информатики не хотят делать вообще этим заниматься. Так что остаемся на XP. В общем, никто в шею не гонит, это не срочно, но лично мне надо, так что я первый в очереди... :)))) Когда сделаешь... выкладывай тут... Обязательно посмотрим. Я буду периодически заходить... мониторить... Удачи в творчестве! :)

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Как «Усиление микрофона» включить программно

Сообщение Proxy » 28.09.2016 (Ср) 13:18

Vova_2581 писал(а):У нас везде Windows XP стоит и все программы именно под XP написаны. Вопрос подымался, конечно, чтобы на Win10 перейти

А до этого поднимался вопрос о переходе на Vista, 7, 8 и 8.1? :lol:

Хакер писал(а):да и думал, что уже никому не нужно, все забыли

Я вот ещё про эту штуку помню :lol:

А как насчет управления всем этим делом не через GUI? Предполагается какой-то ещё интерфейс? Часто микшер нужен не на локальной машине (у нас, например, всё радиовещание производится с устройства на Windows XP Embedded, находящейся далеко-далеко (радиорубка (комната с усилителями), в которую когда-то приходилось вообще человека ногами отправлять; минут 10 по территории, ныне человеческими единицами не посещается); типичная задача: погасить вещание с отдельного входа (там FM приемник, например) и включить радиогазету/зарядку по расписанию/обращение к трудовому коллективу/отыграть плейлист к празднику и затем снова переконфигурировать микшер, чтобы снова начал вещать с линейного входа. на котором аналоговый FM приемник. Всё это приходится делать через VNC специально обученному человеку, VNC на данном специфическом железе работает так себе). Так вот очень было бы полезно, чтобы микшер мог переходить на какую-то схему по триггеру (например появление появление сигнала на линейном входе или наоборот продолжительное отсутствие сигнала (профилактика на радиостанции или FM приемник нашел себе альтернативную несущую) приводит к запуску указанного приложения (аудиоплеер) или переключение схемы).
Follow the white rabbit.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 28.09.2016 (Ср) 14:47

Proxy писал(а):А до этого поднимался вопрос о переходе на Vista, 7, 8 и 8.1? :lol:

Нет, такого вопроса не подымалось. Та никто ничего у нас не будет делать. Я вас умоляю...

Proxy

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

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Как «Усиление микрофона» включить программно

Сообщение Proxy » 28.09.2016 (Ср) 14:51

:roll:
Follow the white rabbit.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 28.10.2016 (Пт) 9:51

И снова здрасьте! Я, это... ну, типа этого... просто, короче, как бы случайно проходил мимо... и как бы... ну чисто случайно зачесалось мне спросить у Хакера: как там наш микшер?? Просто уже месяц прошел и никаких вестей вообще. :( Может хотя бы скажи на какой стадии разработки уже?? Ну или хоть что-нибудь скажи: как там дела? Я не подгоняю... просто уже месяц... и ничего не слышно, хотя бы знать что там и как??..

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как «Усиление микрофона» включить программно

Сообщение Хакер » 28.10.2016 (Пт) 16:25

С момента, когда я в последний раз описывал статус готовности, проект микшера не продвинулся ни на строчку. Потому что у меня, в частности, сильно прибавилось не-программистских проблем, которые я пока пытаюсь решить.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как «Усиление микрофона» включить программно

Сообщение Vova_2581 » 29.10.2016 (Сб) 10:54

Хорошо, я понял. Ну, что ж делать, будем ждать... В общем, по возможности, сообщай, когда будет все готово. Мне лично этот микшер очень нужен. Я уже говорил, что мы его у себя применим на комплексах. Предварительно, конечно, по тестируем, и если глюков не будет, то на все остальные машины раскидаем. Да... и такая просьба: если будет возможно, то добавь, пожалуйста, в настройки микрофона функцию «Усиление микрофона» - это очень нужная и важная функция!! У нас без нее никак. Заранее спасибо! В общем, ждем...

P.S. Удачи в решении всех не-программистских проблем! :)

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

    TopList