Подтвердить что ты не робот

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

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

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

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

Вся помощь оценена!

4b9b3361

Ответ 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, звук будет по-прежнему выходить из динамиков при подключении наушников.