windows11 一键切换音频输出设备
前言
我在家玩电脑的时候经常需要切换声音输出设备,以前win10切换声音输出好像只要点击两下,win11任务栏把wifi和声音放一起了,鼠标得点三下才能切换设备,纯在给我添堵,所以想查一下怎么用命令行切换输出设备,并最终实现一键切换。
命令行切换输出设备
百度的AI智能回答:
在Windows中,可以使用命令行工具nircmd来切换音频输出设备。首先,你需要下载nircmd工具,它是一个小巧的多功能命令行工具,可以控制多种Windows操作。
下载链接:http://www.nirsoft.net/utils/nircmd.html
下载后,将nircmd.exe放在你选择的目录中,例如C:\nircmd。
以下是使用nircmd切换音频输出设备的命令:
nircmd.exe setdefaultsounddevice "设备名称"
将"设备名称"替换为你想要设置为默认的音频输出设备名称。
例如,如果你的音频输出设备名称是"Realtek Audio",你可以使用以下命令:
nircmd.exe setdefaultsounddevice "Realtek Audio"
确保nircmd.exe可以在你的环境变量PATH中找到,这样你就可以从任何命令行位置运行这个命令。如果没有添加到环境变量,你需要给出完整的路径。
注意:这个方法切换的是Windows默认的音频输出设备,并不是通过程序控制音频流向不同的设备。如果需要在程序级别做到这一点,通常需要依赖特定的音频库和API。
显然下载一个命令行工具nircmd就可以办到,它也给出了nircmd官网http://www.nirsoft.net/utils/nircmd.html
下载nircmd
进入官网拉到最下面下载跟电脑相应的版本,我是下载最后一个Download NirCmd 64-bit
下载下来是一个zip压缩包,解压出来三个文件
打开nircmd.exe,点击 Copy To Windows Directory 将该exe文件放在C盘
打开C:/Windows可以看到nircmd.exe已经被复制过来了
测试nircmd
按win+R打开运行,输入cmd,回车打开命令行工具,输入命令:
nircmd.exe setdefaultsounddevice "PHL242M7"
这里的“PHL242M7”是你的输出设备名称(右键屏幕左下角的小喇叭,点击声音设置打开设置查看)
我这里两个设备:
插在主板的 扬声器 是 耳机
插在显卡的 PHL242M7 是 音响
输入命令测试,成功切换
再试一下切换扬声器:
没有问题,接着就可以写一下.bat文件了
编写批处理脚本
参考:https://blog.csdn.net/qq_46387453/article/details/134012916
新建一个.txt文件,并把它的后缀改为.bat,右键在笔记本中编辑,写入代码,保存
耳机为扬声器,音响为PHL242M7,需要的自行修改
2024.09.30的更新有更方便修改的代码
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion
set tempfile=%TEMP%\tempfile.txt
if exist "%tempfile%" (
for /F %%i in (%tempfile%) do (set currentdevice=%%i)
) else (
echo 扬声器 > "%tempfile%"
set currentdevice=扬声器
)
if "!currentdevice!"=="扬声器" (
echo PHL242M7 > "%tempfile%"
C:\Windows\nircmd.exe nircmd.exe setdefaultsounddevice "PHL242M7"
) else (
echo 扬声器 > "%tempfile%"
C:\Windows\nircmd.exe nircmd.exe setdefaultsounddevice "扬声器"
)
endlocal
exit
踩了个小坑,打代码习惯等号两边留空格,导致运行不了
保存之后双击运行,检查是否切换成功。
在上文提到的老哥他是用键盘宏来运行这个.bat文件的,我的vgns99宏没办法运行命令,所以我只能另辟蹊径,看能不能把.bat文件放在任务栏上常驻,点一下就可以运行。
将bat文件固定到任务栏
百度AI智能回答说.bat文件通常是在命令提示符下运行的脚本,而任务栏通常用于固定应用程序,而不是脚本或命令。所以如果想要实现将.bat文件固定到任务栏,可以创建一个快捷方式到.bat文件,并将这个快捷方式固定到任务栏。
这里又踩了一个小坑,百度AI智能回答说直接右键.bat文件,发送快捷指令到桌面,这样就可以将这个快捷指令固定到任务栏,我试了一下还是不行,所以得用下面这个大佬的方法
参考:https://www.cnblogs.com/y593216/p/18227797
在桌面新建一个快捷方式
点击浏览选中上文创建的.bat文件
在路径前面加入cmd /c
cmd /c “批处理文件路径”:批处理文件执行完后窗口自动关闭
cmd /k “批处理文件路径”:批处理文件执行完后后窗口不会自动关闭
给快捷方式命名,点击完成
就获得了一个快捷方式
右键这个快捷方式,点击固定到任务栏(我这里是因为已经固定了所以是从任务栏取消固定)
最后测试一下点一次改变一次输出设备
唯一美中不足的是图标有点丑hhh,不过可以右键点击属性,选择快捷方式,下面的更改图标,不过我懒得找好看的图标了,就这么凑合用吧
2024.09.28 更新一下怎么更换图标
更换图标
老规矩先百度了一下,说是要.ico格式的图标文件,所以第一步,先找图标
我是在阿里巴巴的iconfont上找图标的(有能力的自己画一个也行,毕竟矢量图更不会糊),找到心仪的图标之后下载PNG格式的图片
然后搜索在线转ico的工具,我找到了这款
先选择文件,把刚刚下载下来的PNG图片上传上去,然后点击开始转换,等一会转换结果出来之后点击右边的下载按钮
他会跳转到这个界面,点击文件链接,会单独打开一个页面
这里直接右键图片另存为,我建议存在C:/Windows/System32里面,和原本系统的一些图标放在一起,自己起名,尽量起英文名称,毕竟windows中文路径在某些情况下会识别不出来
我试了几个图标,选了个看起来比较顺眼的
直接右键属性,更改图标,点击浏览找到刚刚存的.ico图标,然后点确定,再点应用
可以看到图标已经修改成功
再次右键,点击显示更多选项,从任务栏取消锁定,再次右键重新固定在任务栏就可以了
完美
2024.09.30 更新一下切换通知的功能
20240930更新
切换成功弹出通知弹窗
nircmd有个trayballoon指令,带四个参数[Title] [Balloon Text] [Icon File] [Timeout],一个都不能少,还不能为空
- [Title] 通知标题
- [Balloon Text] 通知正文
- [Icon File] 通知图标,.ico文件(例如:c:\icons\myicon.ico)或exe、dll文件和图标的下角标(例如: shell32.dll,-154)
- [Timeout] nircmd在弹窗出来多久后关闭(毫秒)
右键前面写的.bat文件,在记事本中编辑,直接写在endlocal上面
C:\Windows\nircmd.exe trayballoon "音频输出设备:" "PHL242M7" "%SystemRoot%\System32\customTransparency.ico" 1
[Title] 和 [Balloon Text] 随便写,[Icon File] 要注意不能为空,只能为.ico文件(很奇怪我的高清ico写到这里面就糊得不能看了,所以我换成了张纯透明的图片),最后一个 [Timeout] 如果很小为1或者0的话,[Icon File]会加载不出来,算是个小bug吧,刚好我不喜欢有图标,所以我就设置为1,效果如下:
带图标(高糊)效果如下:
完整的.bat文件如下:
需要代码的友友将 “扬声器” 和 “PHL242M7 ”替换为你的耳机和音响名称
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion
@REM 耳机
set headset=扬声器
@REM 音响
set audio=PHL242M7
set tempfile=%TEMP%\tempfile.txt
if exist "%tempfile%" (
for /F %%i in (%tempfile%) do (set currentdevice=%%i)
) else (
echo %headset% > "%tempfile%"
set currentdevice=%headset%
)
if "!currentdevice!"=="%headset%" (
set nextDevice=%audio%
) else (
set nextDevice=%headset%
)
echo %nextDevice% > "%tempfile%"
C:\Windows\nircmd.exe nircmd.exe setdefaultsounddevice "%nextDevice%"
C:\Windows\nircmd.exe trayballoon "音频输出设备:" "%nextDevice%" "shell32.dll,-154" 1
endlocal
exit