source

배치 파일/Powershell 스크립트를 실행하여 재생 장치

ittop 2023. 9. 24. 13:06
반응형

배치 파일/Powershell 스크립트를 실행하여 재생 장치

컴퓨터(Windows 7)가 TV에 연결되어 있으며, 디지털 오디오(S/PDIF)(고화질 오디오 장치)와 헤드셋(2-Corsair CA-HS1 USB 헤드셋) 사이의 소리에 대한 출력 장치를 매우 자주 변경합니다.

나는 이것을 변경하는 배치/스크립트 파일을 실행할 수 있기를 원하므로 "볼륨 오른쪽 클릭 > 재생 장치 > "출력 장치 표시"를 하고 "기본값 설정"을 누를 필요가 없습니다.

사치스러운 문제인 건 알지만, 다른 사람한테 배울 수 있을까요?

도와주신 모든 분들 감사합니다!

'1호선'을 재생 장치로 'Line 1'을 설정했습니다.

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

NirCmd는 사용자 인터페이스를 표시하지 않고 유용한 작업을 수행할 수 있도록 다운로드할 수 있는 작은 명령줄 유틸리티입니다.

저는 당신과 똑같은 요구사항을 가지고 있었고, 당신의 게시물을 우연히 발견한 후 다음과 같은 것을 발견했습니다.

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.5Mb)가 조금 필요합니다.

원래 기사에 나와 있는 대본이 저에게는 맞지 않습니다.기본 장치를 변경하는 것이 아니라 활성화/비활성화 장치를 검색하고 해당 값을 변경하는 것입니다.지금 기본 장치 두 개를 전환하도록 편집했습니다.사운드 제어판(mmsys.cpl)을 연 다음 재생 장치 목록을 목록의 두 번째 항목(즉, {Down2} 부분)으로 스크롤하여 작동합니다.내 스피커가 내 목록의 두 번째 항목이기 때문입니다.그런 다음 장치가 기본값인지 확인합니다.그렇지 않으면 기본값으로 설정하고 창을 닫습니다.이미 기본값인 경우 2번 더 스크롤하여 기본값으로 설정합니다.

따라서 자신의 디바이스 목록에 맞게 {Down2} 라인을 수정해야 합니다.

 #+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
    }       
}

Dale Newton의 게시물을 팔로우하기 위해 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를 바인딩하여 몇 번의 키 누름으로 실행할 수 있습니다.개인적으로 저는 코르세어 K95를 사용하고 있기 때문에 소프트웨어를 사용하여 제 'G' 키에 묶습니다.

또한 소리 환경설정인 경우 이름 충돌을 방지하기 위해 장치 이름을 변경할 수 있습니다.

저는 이름을 계속 바꾸는 HDMI 장치를 가지고 있어서 기존의 어떤 솔루션도 제게 맞지 않았습니다.

저는 결국 이 파워셸과 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

제가 알기로는 이것을 프로그램적으로 할 수 있는 방법은 없습니다.마이크로소프트는 응용프로그램이 사용자가 설정한 오디오 설정을 무시하는 것을 원치 않기 때문에 이는 의도적인 설계입니다.

여기서 같은 답을 찾을 수 있지만 창을 조작하는 솔루션을 사용하면 여기에서 확인할 수 있습니다.

다음 스크립트는 Windows 7(윈도우 7)에서 작성되며 sendkey를 사용합니다.발견한 다른 토막글을 기반으로 하지만 선택 항목이 일관되게 유지되고 이탈 창이 표시되지 않도록 추가합니다.

Sleep Time(수면 시간)이 계속 재생되는 경우 시스템에 대해 조정할 수 있습니다.Playback Devices(재생 장치) 창에서 선택하려는 항목의 인덱스를 첫 번째 매개 변수로 사용하여 스크립트를 호출합니다.

'작업 표시줄'에 새 '툴바'를 만들어 클릭 한 번으로 각 장치를 선택할 수 있습니다.

작업 표시줄 도구 모음 그림

'===============================================================================
'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 argument representing the device number", vbinformation + vbokonly, Wscript.ScriptName
  Wscript.Quit 1
elseif ( false = IsNumeric( Wscript.Arguments.Item(0) ) )  then
  MsgBox "The argument 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를 통해 컴퓨터를 TV에 연결할 수도 있습니다.

Media Player Classic Home Cinema(미디어 플레이어 클래식 홈 시네마)를 사용하여 TV에서 비디오 파일을 보고 싶을 때 MPH용 오디오 장치를 지정할 수 있습니다.전체 컴퓨터에서 기본 사운드 장치를 전환하지 않고 옵션에 있는 HC.

만약 당신의 용도가 나와 비슷하다면 MPC:HC가 당신의 문제를 해결해 줄 것입니다.

를 하십시오.nircmd setdefaultsounddevice speakers기업이나 교육 환경 로그인 스크립트에서는 헤드폰을 꽂았을 때 스피커에서 소리가 계속 나옵니다.

언급URL : https://stackoverflow.com/questions/9838514/setting-playback-device-by-executing-a-batch-file-powershell-script

반응형