Настройка устройства воспроизведения путем выполнения пакетного файла / сценария powershell

У меня есть компьютер (Windows 7), подключенный к телевизору, и я очень часто меняю устройство вывода звука между цифровым аудио(S/PDIF) (аудиоустройство высокой четкости) и моей гарнитурой (2 - Corsair CA-HS1 USB-гарнитура)

Я хочу иметь возможность выполнить пакет / файл сценария, который изменяет это для меня, поэтому мне не нужно "щелкнуть правой кнопкой мыши громкость > устройства воспроизведения >" отметить устройство вывода " и нажмите "Установить по умолчанию".

Я знаю, что это проблема роскоши, но эй, может быть, я могу узнать что-то от кого-то?

вся помощь приветствуется!

7 ответов


У меня было то же самое требование, что и у вас, и, наткнувшись на ваше сообщение, я нашел следующее:

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 Мб)

сценарий указана в оригинальной статье не работает для меня. Он ищет включенные / отключенные устройства и изменяет это значение, в отличие от изменения устройства по умолчанию. Я отредактировал его, чтобы переключаться между 2 устройствами по умолчанию. Он работает, открывая панель управления звуком (mmsys.cpl), затем прокрутите список устройств воспроизведения до второго элемента в списке (это часть {Down 2}). Это потому, что мои колонки второй пункт в моем списке. Затем он проверяет, является ли устройство по умолчанию или нет. Если нет, то устанавливает его по умолчанию и закрывает окно. Если это уже значение по умолчанию, оно прокручивается еще 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
    }       
}

Это, как я 'Линия 1', как устройство воспроизведения:

start /min "" G:\......\nircmd.exe setdefaultsounddevice "Line 1"

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


насколько я понимаю, нет способа сделать это программно. Это преднамеренный дизайн, так как Microsoft не хочет, чтобы приложения переопределяли настройки звука, установленные пользователем.

вы найдете тот же ответ здесь но если Вы решения, которые манипулируют windows, вы можете посмотреть здесь.


выполнить Дейл Ньютона пост NirCmd - это отличный способ сделать это. Кроме того, если вы соедините его с AutoHotKey вы можете создать исполняемый файл, который будет изменять ваши устройства, не открывая надоедливые CMD окна каждый раз, когда вы запустите его. Например, у меня есть два источника, которые я переключаю между все время, один-мои наушники, а другой-мой монитор. Для моего монитора я создал скрипт ahk, который делает следующее:

#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 в exe и привязать каждый exe к макро клавиатуры, чтобы вы могли выполнить их с помощью нескольких нажатий клавиш. Лично я использую Corsair K95, поэтому я использую их программное обеспечение для привязки их к моим ключам "G".

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


следующий сценарий написан в Windows 7 и использует клавиши sendkeys. Он основан на других фрагментах, которые я нашел, но добавляет к ним, чтобы убедиться, что выбор согласован, а случайные окна не отображаются. Вы можете настроить время сна для своей системы, если она все еще играет. Вызовите скрипт, используя ярлык с индексом элемента, который вы хотите выбрать в окне устройства воспроизведения в качестве первого параметра. Вы можете создать новую "панель инструментов" на "панели задач", чтобы выбрать каждое устройство с одним щелчок: панель задач панель инструментов изображение

'===============================================================================
'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

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

когда я хочу смотреть видеофайлы на телевизоре, я использую Media Player Classic Home Cinema - это позволяет мне указать аудиоустройство для MPH: HC в параметрах без переключения моего звукового устройства по умолчанию на всем компьютере.

Если ваше использование похоже на мое, возможно, MPC: HC решит вашу проблему для вас.


обратите внимание, что если вы используете "NirCmd setdefaultsounddevice speakers" в сценарии входа в корпоративную или образовательную среду, звук все равно будет выходить из динамиков при подключении наушников.