场景
宿舍电脑的音频设备有两个,一个耳机,一个小扬声器。一般的切换设备的操作方式,是用鼠标去点击右下方任务栏的声音图标进行切换。
为了从耳机切换成扬声器,需要点击至少3下鼠标,如果在全屏状态下甚至需要切到桌面才能操作,属实不够便捷(不够酷)。在搜索引擎一番冲浪后,研制出了一个可以快速切换声音播放设备的方法。先看看效果展示:
可以从上面的gif看出,鼠标没有进行任何点击,只需键盘快捷键便能快速切换音频播放设备。其中,切换播放设备的快捷键是右Alt + p
,切换静音的快捷键是右Alt + 空格
。
实现
安装依赖软件
本功能主要依赖两个软件,第一个是AutoHotkey,用于编写快捷键监听脚本。第二个是NirCmd,用于切换声音播放设备。请先按照指引分别下载安装这两款软件。
安装AutoHotkey
第一步,打开官网:https://www.autohotkey.com/ 第二步,点击Download按钮,再选择Download Current Version
第三步,等待下载完成后点击exe进行安装,就选第一个就好了,安装好之后点Exit
安装NirCmd
准确来说这个东西不需要安装,只需要把它下载好加到环境变量PATH里,或者和我们的脚本放在一起。
第一步,打开官网,滑动到页面最下方:https://www.nirsoft.net/utils/nircmd.html 第二步,点击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 + 空格
,在代码中也可以修改成任意其他键盘组合,各种按键的名称请查阅文档:https://wyagd001.github.io/zh-cn/docs/KeyList.htm。
添加nircmd到PATH(非必须)
如果希望把.ahk
文件放到其他文件夹,不与nircmd.exe
同个地方,那么就需要把nircmd.exe
所在路径添加到系统PATH变量里。
第一步,复制解压后的文件夹路径
第二步,按一下win,输入path,选择“编辑系统环境变量”
第三步,把刚才的路径加到PATH里,按照这个顺序填
这时打开一个cmd,输入nircmd应该会看到一个窗口弹出来,就说明配置好了PATH。