我正在尝试在 Windows 10 上编写一个批处理文件,以便我在运行时在耳机和扬声器之间切换为默认音频设备。我不想使用任何第三方软件。
我尝试搜索,但只找到了似乎不起作用的旧脚本,并且还引用了HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Volume Control\
似乎不再存在的路径。我在 Windows 10 注册表中找不到有关此问题的任何信息,而且如果我不确定自己在做什么,我也不太愿意过多地摆弄注册表。
答案1
我知道你不想使用任何第三方软件,但如果你不介意使用~100kb 的 exe,你可以使用尼科姆使用以下命令:
nircmd setdefaultsounddevice "Speakers" 1
或者
nircmd setdefaultsounddevice "Headphones" 1
您需要确保使用下面列出的音频设备的准确名称Playback Devices
(右键单击系统托盘中的声音控件)。将它们重命名Properties
为更简单的名称可能会更容易,尤其是当名称发生任何冲突时。
1
命令末尾的 表示“默认设备”。使用表示2
“默认通信设备”。
如果您真的不想使用第三方工具,这里有一个注册表项的差异,当我更改默认声音设备时,它似乎会发生变化,它可能对您有用,但我不知道它到底在做什么。它似乎不像 1 或 0 那样简单地表示它是否是默认的。
答案2
Powershell 解决方案在两个特定音频设备之间切换
这要求您从这里下载并安装 AudioDevice 命令行: https://github.com/frgnca/AudioDeviceCmdlets
按照他们的安装说明进行操作,并检查命令行在你的 Powershell 中是否正常运行。
然后你可以使用这个脚本:
<#
Use
Get-AudioDevice -List
to learn about available devices on your system.
Then set the two variables below with the start of their names.
#>
$device1 = "PHILIPS"
$device2 = "Speakers"
$Audio = Get-AudioDevice -playback
Write-Output "Audio device was " $Audio.Name
Write-Output "Audio device now set to "
if ($Audio.Name.StartsWith($device1)) {
(Get-AudioDevice -list | Where-Object Name -like ("$device2*") | Set-AudioDevice).Name
} Else {
(Get-AudioDevice -list | Where-Object Name -like ("$device1*") | Set-AudioDevice).Name
}
然后,您可以将该脚本设置为任务栏或任何地方的快捷方式。以下是我使用的示例快捷方式:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden C:\Tools\ToggleSoundDevice.ps1
您还可以找到许多解决方案来为此附加快捷键。
答案3
自 Windows 8(或者更早?)以来,PC 的音频配置存储在 中HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render
。下面Render
有 GUID 命名的键,每个键DeviceState
在根目录下包含 dword 值。但它是如何编码的?
- 1 活跃
- 2 残障人士
- 4 不存在
- 8 不插电
因此,在 1 和 2 之间切换的 powershell/bat 脚本应该可以解决问题。
编辑:要获取人类可读的设备名称,请阅读子{b3f8fa53-0004-438e-9003-51a46e139bfc},6
键Properties
答案4
更可靠的 AudioDevice 命令行解决方案。https://github.com/frgnca/AudioDeviceCmdlets
感谢@pgr 的原始答案。
对于语言本地化来说,使用 ID 代替名称更为可靠。
$Audio = Get-AudioDevice -playback
Write-Output "Audio device was " $Audio.Name
Write-Output "Audio device now set to "
if ($Audio.Index -EQ 1) {
(Get-AudioDevice -list | Where-Object Index -EQ 2 | Set-AudioDevice).Name
} Else {
(Get-AudioDevice -list | Where-Object Index -EQ 1 | Set-AudioDevice).Name
}