【小工具】自定义键盘快捷键切换音频播放设备、快速开关切换静音

场景

宿舍电脑的音频设备有两个,一个耳机,一个小扬声器。一般的切换设备的操作方式,是用鼠标去点击右下方任务栏的声音图标进行切换。
鼠标切换播放设备
为了从耳机切换成扬声器,需要点击至少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到一个纯英文路径
解压zip

创建快捷键脚本

在刚才解压的文件夹,右键新建->AutoHotkey Script,随便给个名字,你将得到一个.ahk文件:
新建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变量里。

第一步,复制解压后的文件夹路径
nircmd路径
第二步,按一下win,输入path,选择“编辑系统环境变量”
搜索path
第三步,把刚才的路径加到PATH里,按照这个顺序填
加PATH
这时打开一个cmd,输入nircmd应该会看到一个窗口弹出来,就说明配置好了PATH。

nircmd配置结果

特别鸣谢

感谢罗小威同学关于削减PATH部分的建议。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
可以通过监听键盘事件来实现键盘快捷键的功能,同时也可以通过监听 table 的单元格编辑事件来判断当前编辑的单元格位置,从而实现切换单元格编辑的功能。 具体实现方式如下: 1. 监听键盘事件,当按下 Tab 键时,判断当前正在编辑的单元格位置,然后切换到下一个单元格进行编辑。 ``` // 监听键盘事件 $(document).keydown(function (e) { // 判断是否按下了 Tab 键 if (e.keyCode === 9) { // 阻止默认事件 e.preventDefault(); // 获取当前编辑的单元格位置 var editIndex = $('table').find('.layui-table-edit').parent().index(); // 切换到下一个单元格进行编辑 $('table').find('td:eq(' + (editIndex + 1) + ')').trigger('click'); } }); ``` 2. 监听 table 的单元格编辑事件,当单元格进入编辑状态时,添加一个 class 名称用于标记当前正在编辑的单元格。 ``` // 监听 table 的单元格编辑事件 table.on('edit(test)', function(obj){ // 添加 class 名称用于标记当前正在编辑的单元格 $(obj.tr).find('td:eq('+obj.field+')').addClass('layui-table-edit'); }); ``` 3. 监听 table 的单元格编辑结束事件,当结束编辑时,移除用于标记的 class 名称。 ``` // 监听 table 的单元格编辑结束事件 table.on('tool(test)', function(obj){ // 移除用于标记的 class 名称 $(obj.tr).find('.layui-table-edit').removeClass('layui-table-edit'); }); ``` 通过以上三个步骤的组合,可以实现键盘快捷键切换单元格编辑的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值