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

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值