【小工具】自定义键盘快捷键切换音频播放设备、快速开关切换静音(静音 快捷键)
场景
宿舍电脑的音频设备有两个,一个耳机,一个小扬声器。一般的切换设备的操作方式,是用鼠标去点击右下方任务栏的声音图标进行切换。
为了从耳机切换成扬声器,需要点击至少3下鼠标,如果在全屏状态下甚至需要切到桌面才能操作,属实不够便捷(不够酷)。在搜索引擎一番冲浪后静音快捷键,研制出了一个可以快速切换声音播放设备的方法。先看看效果展示:
可以从上面的gif看出,鼠标没有进行任何点击,只需键盘快捷键便能快速切换音频播放设备。其中,切换播放设备的快捷键是右Alt + p,切换静音的快捷键是右Alt + 空格。
实现 安装依赖软件
本功能主要依赖两个软件,第一个是AutoHotkey,用于编写快捷键监听脚本。第二个是NirCmd,用于切换声音播放设备。请先按照指引分别下载安装这两款软件。
安装AutoHotkey
第一步,打开官网:
第二步,点击Download按钮,再选择Download Current Version
第三步,等待下载完成后点击exe进行安装,就选第一个就好了,安装好之后点Exit
安装NirCmd
准确来说这个东西不需要安装,只需要把它下载好加到环境变量PATH里,或者和我们的脚本放在一起。
第一步,打开官网,滑动到页面最下方:
第二步,点击Download NirCmd 64-bit
第三步,解压下载好的zip到一个纯英文路径
创建快捷键脚本
在刚才解压的文件夹,右键新建->AutoHotkey Script,随便给个名字,你将得到一个.ahk文件:
右键它,点击Edit Script,会打开一个记事本,把下面的代码复制进去。
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #SingleInstance, force ; 填写你的音频设备名称 devices := ["耳机", "扬声器"] ; 设置提醒图标。0x0(无图标),0x1(信息图标),0x2(警告图标),0x3(错误图标) logo := 0x1 ; 设置切换提示声。0x0(有提示声),0x10(无提示声) voice := 0x0 cur := 0 ; Menu Tray, NoIcon ChangeDevice(devices[cur+1], logo+voice) RAlt & p:: cur := Mod(cur + 1, devices.Length()) option := logo+voice ChangeDevice(devices[cur+1], option) return RAlt & Space:: SoundSet, -1, , mute return ChangeDevice(device, option) { TrayTip, %device%, 当前播放设备, , %option% Run, nircmd.exe setdefaultsounddevice %device% SetTimer, HideTrayTip, 3000 } HideTrayTip() { TrayTip ; 尝试以正常的方式隐藏它. ; if SubStr(A_OSVersion,1,3) = "10." { ; Menu Tray, NoIcon ; Sleep 200 ; 可能有必要调整 sleep 的时间. ; Menu Tray, Icon ; } }
先不急着关闭,这时需要你修改一下这一行(第8行):
devices := ["耳机", "扬声器"]
对应你的音频设备的名字,点击右下角小喇叭可以查看(在系统声音设置里可以改名)。
放在devices第一个的是默认设备,每次启动脚本都会切换成它。
修改好后,保存并关闭。
然后双击voice.ahk文件静音快捷键,会发现声音设备切换成默认设备,并显示如图通知,任务栏出现绿色H图标。
试试键盘的右Alt + p和右Alt + 空格吧。
原理 监听键盘
AutoHotkey可以监听任意的键盘/鼠标操作,并执行用户编写的脚本。在上文脚本里,就是监听右Alt + p和右Alt + 空格,分别执行切换播放设备和切换静音操作。实现代码对应下面这部分:
RAlt & p:: cur := Mod(cur + 1, devices.Length()) option := logo+voice ChangeDevice(devices[cur+1], option) return RAlt & Space:: SoundSet, -1, , mute return
然而,AutoHotkey并不支持切换设备,这时候就要借助NirCmd工具来执行切换设备的指令,对应代码中的这个函数:
ChangeDevice(device, option) { TrayTip, %device%, 当前播放设备, , %option% Run, nircmd.exe setdefaultsounddevice %device% SetTimer, HideTrayTip, 3000 }
其中,TrayTip是显示一条通知,如果觉得它烦人可以删掉。Run那行是执行切换操作,再下一行是等待3000毫秒关闭通知。
其他设置
在代码中,还有一些可以设置的项,例如通知的图标和提示声,修改后重启脚本即可。
; 设置提醒图标。0x0(无图标),0x1(信息图标),0x2(警告图标),0x3(错误图标) logo := 0x1 ; 设置切换提示声。0x0(有提示声),0x10(无提示声) voice := 0x0
右键这个绿色的H图标,可以Reload修改后的脚本,也可以Exit退出监听。
修改快捷键
上文脚本中的快捷键是右Alt + p和右Alt + 空格,在代码中也可以修改成任意其他键盘组合,各种按键的名称请查阅文档:。
添加nircmd到PATH(非必须)
如果希望把.ahk文件放到其他文件夹,不与nircmd.exe同个地方,那么就需要把nircmd.exe所在路径添加到系统PATH变量里。
第一步,复制解压后的文件夹路径
第二步,按一下win,输入path,选择“编辑系统环境变量”
第三步,把刚才的路径加到PATH里,按照这个顺序填
这时打开一个cmd,输入nircmd应该会看到一个窗口弹出来,就说明配置好了PATH。
特别鸣谢
感谢罗小威同学关于削减PATH部分的建议。