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

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

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

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

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

Ответы [ 8 ]

22 голосов
/ 21 апреля 2014

Вот как я установил «Строку 1» в качестве устройства воспроизведения:

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

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

9 голосов
/ 22 сентября 2012

У меня было точно такое же требование, как и у вас, и ПОСЛЕ ТОГО, как я наткнулся на вашу публикацию, я обнаружил следующее:

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

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

Следующий скрипт написан на Windows 7 и использует sendkeys. Это основано на других фрагментах, которые я нашел, но добавляет к ним, чтобы гарантировать, что выбор согласован и случайные окна не оставлены отображенными Возможно, вы захотите настроить SleepTime для вашей системы, если она все еще воспроизводится. Вызовите скрипт, используя ярлык с индексом элемента, который вы хотите выбрать в окне «Устройства воспроизведения» в качестве первого параметра. Вы можете создать новую «панель инструментов» на «панели задач», чтобы выбрать каждое устройство одним щелчком мыши: Панель инструментов изображения

'===============================================================================
'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
2 голосов
/ 04 июня 2016

Чтобы подписаться на сообщение Дейла Ньютона , 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».

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

2 голосов
/ 24 марта 2012

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

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

1 голос
/ 20 октября 2018

У меня было устройство 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
0 голосов
/ 07 марта 2017

Обратите внимание, что если вы используете «nircmd setdefaultsounddevice speaker» в сценарии входа в корпоративную или образовательную среду, звук все равно будет исходить из динамиков, когда подключены наушники.

0 голосов
/ 25 марта 2012

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

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

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

...