Название: Программно изменить «Расположение динамиков» Отправлено: LisandreL от Декабрь 16, 2012, 21:17 Подскажите как программно изменить «Расположение динамиков», т.е. переключиться между наушниками, 2.0, 5.1, 7.1 и т.п. Ну или хотя бы в какую сторону копать.
Завязки на Qt нет, так что любыми средствами: WinAPI, ActiveX or what ever. Интересует в общем-то только Windows XP SP3. В реестре значение нашёл, но надо чтоб переключалось «на горячую», а не при перезагрузке / открытие и закрытие OKеем этого диалога. Скриншот диалога, чтобы было понятнее о какой настройке речь: Название: Re: Программно изменить «Расположение динамиков» Отправлено: tester64 от Декабрь 17, 2012, 09:39 К схожей проблеме, выбору звукового устройства, есть несколько подходов, может что-нибудь из этого поможет:
― С помощью mmsys.cpl: Changing your Windows audio device programmatically using VC++ (http://www.codeproject.com/Articles/31836/Changing-your-Windows-audio-device-programmaticall). Есть команды вызыва диалогов (к примеру, "rundll32 mmsys.cpl, showaudiopropertysheet", или в другом синтаксисе: "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0" для "Multimedia/Audio", "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1" для "Sound Properties"), можно поискать в бинарнике по "*propertysheet" и т.п. Возможно удастся отыскать прямую команду (без диалога). Если нет, можно попытаться открывать диалог в скрытом режиме (к примеру, за границами рабочего стола) и слать ему клавиатурные сообщения. Как вариант - с помощью AutoHotkey скрипта: Switch Between Sound Outputs with a Keyboard Shortcut (http://lifehacker.com/5921884/chrome-tabs-usb-headphones-and-getting-locked-out/gallery/3). ― Через реестр: How to change default sound playback device programatically (http://stackoverflow.com/questions/2175318/how-to-change-default-sound-playback-device-programatically) (ответ stacker). Какие ключи реестра меняются, можно отловить посредством Process Monitor (бывшие RegMon+FileMon). Пожалуй это самый простой и наименее времязатратный вариант. ― Недокументированный API (COM-интерфейс IPolicyConfig): Programmatically (or Command Line) change the default sound playback device in Windows 7 (http://www.daveamenta.com/2011-05/programmatically-or-command-line-change-the-default-sound-playback-device-in-windows-7/) (в комментариях также есть ссылка на готовую GUI программу PlaybackDevice (http://heilnizar.deviantart.com/art/PlaybackDevice-Audio-Output-Switch-285591834)). Нужно копаться в исходниках Window, была утечка, где-нибудь на трекерах наверняка сохранилось. Название: Re: Программно изменить «Расположение динамиков» Отправлено: Bepec от Декабрь 17, 2012, 09:55 WinApi из msdn. В Windows 7 помоему это упрощено, в XP незнаю.
Название: Re: Программно изменить «Расположение динамиков» Отправлено: LisandreL от Декабрь 17, 2012, 10:33 Через реестр: How to change default sound playback device programatically (http://stackoverflow.com/questions/2175318/how-to-change-default-sound-playback-device-programatically) (ответ stacker). Какие ключи реестра меняются, можно отловить посредством Process Monitor (бывшие RegMon+FileMon). Пожалуй это самый простой и наименее времязатратный вариант. Ключи то я нашёл, но, что логично, система эти настройки не перечитывает постоянно, а до перезагрузки ждать - не вариант.Как вариант - с помощью AutoHotkey скрипта: Switch Between Sound Outputs with a Keyboard Shortcut. Задача немного другая - надо не девайсы менять, а количество каналов в одном девайсе.Programmatically (or Command Line) change the default sound playback device in Windows 7 (в комментариях также есть ссылка на готовую GUI программу PlaybackDevice). WinApi из msdn. В Windows 7 помоему это упрощено, в XP незнаю. ну подскажите хоть чего там искать, а то я как-то не знаю.Название: Re: Программно изменить «Расположение динамиков» Отправлено: Bepec от Декабрь 17, 2012, 10:48 Посмотрю после обеда.
Название: Re: Программно изменить «Расположение динамиков» Отправлено: kuzulis от Декабрь 17, 2012, 11:07 Если именно ХР - то ХЗ, если Виста и выше - то WASAPI.
Но это с условием, что девайс позволяет менять кол-во каналов при помощи "СТАНДАРТНОГО" Kernel Streaming (KS) интерфейса. Хотя, в принципе для твоего девайса, должен быть стандартный интерфейс управления WDM аудио девайсами (фильтрами), посмотри в сторону KS. PS: Но может быть и иначе: например, в продукте нашей компании смена режима Stereo, 4.1, 5.1, 7.1 и т.п. осуществляется через нашу контрол-панель, путем прямого вызова DeviceIoControl к нашему драйверу. И в этом случае драйвер удаляет предыдущую WDM топологию и создает новую (т.е., к примеру в Win7 Sound CPL отображались 4 пары Stereo L/R выходов, а после вызова контроля будет отображаться один 7.1 узел. ). Название: Re: Программно изменить «Расположение динамиков» Отправлено: kuzulis от Декабрь 17, 2012, 11:31 Вот, почитай это: http://msdn.microsoft.com/en-us/library/windows/hardware/ff536332%28v=vs.85%29.aspx
Проидись по всем ссылочкам... Может поможет что-то. Еще см. тут: http://msdn.microsoft.com/ru-ru/library/windows/desktop/dd316575%28v=vs.85%29.aspx http://msdn.microsoft.com/ru-ru/library/windows/desktop/dd316569%28v=vs.85%29.aspx Название: Re: Программно изменить «Расположение динамиков» Отправлено: Dancing_on_water от Декабрь 17, 2012, 13:27 Вы хотите не изменить расположение динамиков, а залезть в драйвера и микшер.
Судя по этой (http://habrahabr.ru/post/115092/) статье, начиная с виндовс 7, сделать это если можно, пустив под нож все остальные приложения. Название: Re: Программно изменить «Расположение динамиков» Отправлено: LisandreL от Декабрь 17, 2012, 13:43 Вы хотите не изменить расположение динамиков, а залезть в драйвера и микшер. Это не моё название, а Microsoft так это в своём гуе называет. В семёрке этот параметр называется «звуковые каналы» (http://s4.hostingkartinok.com/uploads/images/2012/12/61bf78362e77a850fcfcccc24d08156c.png).И да, интересует только XP. Название: Re: Программно изменить «Расположение динамиков» Отправлено: tester64 от Декабрь 17, 2012, 14:56 Как вариант - с помощью AutoHotkey скрипта: Switch Between Sound Outputs with a Keyboard Shortcut. Задача немного другая - надо не девайсы менять, а количество каналов в одном девайсе.Programmatically (or Command Line) change the default sound playback device in Windows 7 (в комментариях также есть ссылка на готовую GUI программу PlaybackDevice). Ну да, я и написал: "К схожей проблеме, выбору звукового устройства...". Но скрипт просто адаптировать к выбору канальности. Вот к примеру выбор пункта "Квадрофонические динамики" (проверил под в Windows XP SP3 rus): Код: Run, RunDll32.exe shell32.dll`,Control_RunDLL mmsys.cpl`,`,0 Решение понятно корявое, но на безрыбье и рак рыба... Насколько я знаю, официального майкрософтовского способа установить программно канальность не существует. Во избежание проблем (для службы поддержки) из-за перезаписи настроек производителями софта. Буду рад ошибиться. Название: Re: Программно изменить «Расположение динамиков» Отправлено: kuzulis от Декабрь 17, 2012, 14:59 Может это?
http://msdn.microsoft.com/ru-ru/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setspeakerconfig%28v=vs.85%29.aspx Название: Re: Программно изменить «Расположение динамиков» Отправлено: tester64 от Декабрь 17, 2012, 15:45 Может это? http://msdn.microsoft.com/ru-ru/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setspeakerconfig%28v=vs.85%29.aspx Возможно. Судя по этой странице функциональность недоступна только на Vista/7/8: Цитировать In Windows Vista and later versions of Windows, SetSpeakerConfig is a NOP. For Windows Vista and later versions, the speaker configuration is a system setting that should not be modified by an application. End users can set the speaker configuration through control panels. |