通过执行批处理文件/ powershell脚本设置播放设备

mutmk8jj  于 2022-12-29  发布在  Shell
关注(0)|答案(8)|浏览(281)

我已经把我的电脑(Windows 7)连接到电视上,我经常改变数字音频(S/PDIF)(高清音频设备)和我的耳机(2-海盗船CA-HS 1 USB耳机)之间的声音输出设备
我希望能够执行一个批处理/脚本文件谁为我改变这一点,所以我不必“右键单击音量〉播放设备〉“标记输出设备”,然后单击“设置默认值”。
我知道这是奢侈品的问题,但是嘿,也许我能从别人身上学到点什么?
感谢所有帮助!

wxclj1h5

wxclj1h51#

这是我如何将“Line 1”设置为播放设备的:

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

NirCmd是一个可以下载的小命令行实用程序,它允许您在不显示任何用户界面的情况下执行一些有用的任务。

rqmkfv5c

rqmkfv5c2#

我有完全相同的要求,因为你,和跌跌撞撞后,你的帖子,我发现以下:
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)
原文中提供的脚本对我不起作用。它搜索启用/禁用的设备并更改该值,而不是更改默认设备。我现在编辑了它以在2个默认设备之间切换。打开声音控制面板即可(毫米系统cpl),则向下滚动回放设备列表到列表中的第二项(这是{向下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
    }       
}
8ljdwjyq

8ljdwjyq3#

为了跟进Dale Newton's post,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”键。
另外要注意的是,如果您在您的声音首选项中,您可以重命名任何设备,以避免命名冲突。

p5fdfcr1

p5fdfcr14#

我有一个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
yzuktlbb

yzuktlbb5#

据我所知,没有办法通过编程来实现这一点。这是一个深思熟虑的设计,因为微软不希望应用程序覆盖用户设置的音频设置。
你会发现同样的答案here,但如果你的解决方案,操纵窗口,你可以看看here

35g0bw71

35g0bw716#

下面的脚本是在Windows7中编写的,使用了sendkeys。它基于我找到的其他代码段,但添加到它们中以确保选择一致,并且不显示离散窗口。
如果系统仍在播放,您可能需要调整系统的睡眠时间。使用快捷方式调用脚本,并将您希望在“播放设备”窗口中选择的项目的索引作为第一个参数。
您可以在“任务栏”上创建一个新的“工具栏”,只需单击一下即可选择每个设备:
Taskbar toolbar picture

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

yzxexxkh7#

可能与通过脚本切换音频设备无关,但我也有我的电脑通过HDMI连接到我的电视。
当我想在电视上观看视频文件时,我使用Media Player Classic Home Cinema -这让我可以在选项中指定MPH:HC的音频设备,而不需要在整个计算机上切换我的默认声音设备。
如果你的用法和我的相似,也许MPC:HC会为你解决你的问题。

xvw2m8pv

xvw2m8pv8#

请注意,如果您在企业或教育环境登录脚本中使用nircmd setdefaultsounddevice speakers,则插入耳机时扬声器仍会发出声音。

相关问题