[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
ger_kar писал(а):Только вот изменение этих ключей напрямую в реестре на саму настройку никак не влияет.
Vova_2581 писал(а):Лезу в настройки, а там «Усиление микрофона», которое раннее было включено, почему-то самопроизвольно выключается.
ger_kar писал(а):Только вот изменение этих ключей напрямую в реестре на саму настройку никак не влияет
Хакер писал(а):за установку и сброс этой опции отвечает API-функция mixerSetControlDetails — её и нужно использовать
Ну хранит то она их в реестре, в тех самых ключах, которые я указал. Но система же их там просто хранит, если систему например перезагрузить, то при новой загрузке она считает данные ключа и установит нужные параметры согласно настройке. А при работе она использует то значение, которое загрузилось и поэтому если его просто поменять в реестре, то ровным счетом ничего не изменится, до следующей перезагрузки.Vova_2581 писал(а):А где же тогда система хранит данные о параметрах настройки???
ger_kar писал(а):Ну хранит то она их в реестре, в тех самых ключах, которые я указал. ....до следующей перезагрузки.
В ключах используются данные оборудования, соответственно они валидны только для моего компа. Возможно также, что они еще и от системы зависят (у меня Windows XP SP3). Да и вообще это тупиковый путь. Нужно идти правильной дорогой, которую показал ХакерVova_2581 писал(а):Вопрос первый: наверное, Вы ошиблись... это какие-то другие ключи должны быть??? Дело в том, что я скопировал Ваши ключи реестра из примера в созданный REG-файл.
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
Vova_2581 писал(а):Я читал сообщение Хакера, только причем тут понимание???
Система
Микшер 1
Линия 1
Control 1
Control 2
...
Control N
Линия 2
Control 1
...
Control N
...
Линия N
Микшер 2
...
Микшер N
Хакер писал(а):при большом числе линий окно микшера может не умещаться на экране.
Хакер писал(а):Нет шорткатов для возвращения баланса в нейтральное положение.
Хакер писал(а):Кстати, давно хочу написать замену стандартному микшеру.
'Для работы кода нужно открыть новый проект и поместить на нее кнопку 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
Хакер писал(а):А что касается способа решения — конечно это дурной метод.
Хакер писал(а):У меня микшер стилизованный, у него там нестандартный интерфейс, кастомные элементы управления, отрисовка с альфа-каналом. Кое-какие иконки рисовать надо. Вот на этом я приостановил разработку (да и думал, что уже никому не нужно, все забыли).
Vova_2581 писал(а):У нас везде Windows XP стоит и все программы именно под XP написаны. Вопрос подымался, конечно, чтобы на Win10 перейти
Хакер писал(а):да и думал, что уже никому не нужно, все забыли
Proxy писал(а):А до этого поднимался вопрос о переходе на Vista, 7, 8 и 8.1?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47