Настройка устройства воспроизведения путем выполнения пакетного файла /powershell script
У меня есть компьютер (Windows 7), подключенный к телевизору, и я очень часто меняю устройство вывода звука между Digital Audio (S/PDIF) (аудиоустройство высокой четкости) и моей гарнитурой (2- Corsair CA -HS1 USB-гарнитура)
Я хочу иметь возможность выполнить пакетный / script файл, который меняет это для меня, поэтому мне не нужно "громкость щелчка" > устройства воспроизведения > "Отметить устройство вывода" и нажать "установить по умолчанию".
Я знаю, что это проблема роскоши, но эй, может, я смогу чему-то научиться у кого-то?
Вся помощь оценена!
Ответы
Ответ 1
У меня было то же самое требование, что и вы, и после того, как вы наткнулись на свою публикацию, я обнаружил следующее:
https://web.archive.org/web/20131231034118/http://downloadsquad.switched.com/2010/06/16/windows-7-tip-how-to-change-the-default-audio-device-with-a-hot/
К сожалению, это не родная функция Windows; он требует загрузки небольшого скриптового инструмента с открытым исходным кодом под названием AutoHotKey, но он работает красиво и требует всего лишь небольшого объема памяти (1 ~ 2,5 МБ)
script, представленный в оригинальной статье, не работает для меня. Он ищет устройства Enabled/Disabled и меняет это значение, в отличие от изменения устройства по умолчанию.
Теперь я отредактировал его, чтобы переключиться на 2 устройства по умолчанию.
Он работает, открыв панель управления звуком (mmsys.cpl), затем прокручивая список воспроизводящих устройств ко второму элементу списка (часть {Down 2}).
Это потому, что мои колонки - это второй пункт в моем списке.
Затем он проверяет, установлено ли устройство по умолчанию или нет. Если нет, он устанавливает его как значение по умолчанию и закрывает окно. Если он уже по умолчанию, он прокручивает еще два раза и устанавливает это как значение по умолчанию.
Итак, вам нужно будет скомпенсировать строки {Down 2}, чтобы они соответствовали вашему списку устройств.
#+a::
Run, mmsys.cpl
WinWait,Sound
ControlSend,SysListView321,{Down 2}
ControlGet, selectedDevice, List, Focused, SysListView321
Loop, Parse, selectedDevice, %A_Tab%
if a_index <> 3
continue
else
{
if A_LoopField <> Default Device
{
ControlClick,&Set Default
ControlClick,OK
WinWaitClose
SoundPlay, *-1
return
}
else
{
ControlSend,SysListView321,{Down 2}
ControlClick,&Set Default
ControlClick,OK
WinWaitClose
SoundPlay, *-1
return
}
}
Ответ 2
Вот как я устанавливаю "Линия 1" в качестве воспроизводящего устройства:
start /min "" G:\......\nircmd.exe setdefaultsounddevice "Line 1"
NirCmd - это небольшая утилита командной строки, которую вы можете загрузить, что позволяет выполнять некоторые полезные задачи без отображения какого-либо пользовательского интерфейса.
Ответ 3
Насколько я понимаю, нет никакого способа сделать это программно. Это продуманный дизайн, поскольку Microsoft не хочет, чтобы приложения перекрывали настройки звука, установленные пользователем.
Здесь вы найдете тот же ответ , но если вы решаете, как управлять окнами, вы можете посмотреть здесь.
Ответ 4
Чтобы следить за в сообщении Dale Newton, NirCmd является отличный способ сделать это. Кроме того, если вы соедините его с AutoHotKey, вы можете создать исполняемый файл, который изменит ваши устройства, не открывая надоедливые окна CMD каждый раз, когда вы запустить его. Например, у меня есть два источника, которые я переключаю между всеми моментами, один - мои наушники, а другие - мой монитор. Для моего монитора я создал ahk script, который делает это:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir% ;I have nircmd in the same folder as these scripts
Run, nircmd setdefaultsounddevice "Acer X34-8" 1
Run, nircmd setdefaultsounddevice "Acer X34-8" 2
И еще один для моих наушников с последними двумя строками изменился на:
Run, nircmd setdefaultsounddevice "Headset Earphone" 1
Run, nircmd setdefaultsounddevice "Headset Earphone" 2
Затем вы можете скомпилировать каждый ahk script в exe и привязать каждый exe к макрокоманде клавиатуры, чтобы вы могли выполнить их с помощью нажатия нескольких клавиш. Лично я использую Corsair K95, поэтому я использую их программное обеспечение, чтобы привязать их к моим клавишам "G".
Также обратите внимание, что если вы находитесь в своих настройках звука, вы можете переименовать любое из устройств, чтобы избежать конфликтов имен.
Ответ 5
Следующий script написан в Windows 7 и использует sendkeys. Он основан на других фрагментах, которые я нашел, но добавляет к ним, чтобы гарантировать, что выбор согласован, и незаметные окна не отображаются.
Вы можете настроить SleepTime для своей системы, если она по-прежнему воспроизводится.
Вызовите script с помощью ярлыка с индексом элемента, который вы хотите выбрать в окне устройств воспроизведения, в качестве первого параметра.
Вы можете создать новую "панель инструментов" на своей "панели задач", чтобы выбрать каждое устройство одним щелчком мыши:
Изображение панели инструментов панели задач
'===============================================================================
'This script uses sendkeys to select the Sound Output device
'First parameter should be the desired device number in 'Playback Devices' list
'===============================================================================
Option Explicit
Const SleepTime = 200
Dim WindSh
'===============================================================================
'MAIN ROTUINE
'===============================================================================
'Check the command line input
if ( Wscript.Arguments.Count <> 1) then
MsgBox "You must provide a single integer arguement representing the device number", vbinformation + vbokonly, Wscript.ScriptName
Wscript.Quit 1
elseif ( false = IsNumeric( Wscript.Arguments.Item(0) ) ) then
MsgBox "The arguement provided was not an integer number: " & Wscript.Arguments.Item(0), vbinformation + vbokonly, Wscript.ScriptName
Wscript.Quit 2
End If
set WindSh = CreateObject("Wscript.Shell")
WindSh.run("control.exe mmsys.cpl")
do while (WindSh.AppActivate("Sound") = false)
WScript.Sleep SleepTime
loop
WindSh.sendkeys("{DOWN " & Clng( Wscript.Arguments.Item(0) ) & "}")
WScript.Sleep SleepTime
WindSh.sendkeys("{TAB 2}")
WScript.Sleep SleepTime
WindSh.sendkeys("{ENTER}")
WScript.Sleep SleepTime
WindSh.sendkeys("%{F4}")
WScript.Sleep SleepTime
if (WindSh.AppActivate("Sound") = true) then
WindSh.sendkeys("%{F4}")
end if
Ответ 6
У меня было устройство HDMI, которое постоянно меняет название, поэтому ни одно из существующих решений не помогло мне.
В конце концов я закончил с этим PowerShell и использованием приложения NirCmd.
#File: TV.ps1
$name = "SMART*"
# list active audio playback devices. (Note for cature devices change Render to Capture)
$device = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*\" | where {$_."DeviceState" -eq 1} | foreach-object -Process {(Get-ItemPropertyValue -Path ($_.PSPath + "\Properties\") -Name "{a45c254e-df1c-4efd-8020-67d146a850e0},2")} | Where-Object {$_ -like $name}
C:\bin\NIRCMDC setdefaultsounddevice $device 1
C:\bin\NIRCMDC setdefaultsounddevice $device 2
Ответ 7
Не может быть связано с переключением аудиоустройства через script, но у меня также есть компьютер, подключенный к телевизору через HDMI.
Когда я хочу смотреть видеофайлы на телевизоре, я использую Media Player Classic Home Cinema - это позволяет мне указать аудиоустройство для MPH: HC в настройках без переключения моего стандартного звукового устройства на весь компьютер.
Если ваше использование похоже на мое, возможно, MPC: HC решит вашу проблему для вас.
Ответ 8
Обратите внимание, что если вы используете "nircmd setdefaultsounddevice speakers" в корпоративной или образовательной среде login script, звук будет по-прежнему выходить из динамиков при подключении наушников.