Hey, guy, how are you?

借助 AutoHotKey,实现无需驻留后台的快捷键组合

如题,这种使用方法是我在和键盘上的媒体键较劲时候摸索出来的,权当抛砖引玉,如有谬误之处,欢迎大佬们不吝赐教。

能实现快捷键组合的生产力工具已经相当多了,但是相对一部分需要驻留后台持续监听键盘,而我最初的需求非常简单──把樱桃KC1000右上角那4个按键(3个多媒体键,1个休眠键)改成音量+/-/静音,无论使用什么第三方工具都有的太“重”了;了解到Scancode Map这个注册表项就尝试修改,直到了解到此方法对于USB键盘的部分多媒体键无效……好在后来知道了还有另一个注册表项可以修改媒体键行为(可以使用Shellecute和Association而非简单的键位替换),才使得下面的实践成为可能。

根据个人需要,写了下面两个脚本:

Launch_Keys.ahk

; 强制使用单例,避免脚本重复运行
#SingleInstance force

; 持续运行脚本
Persistent

; 按下 ESC 键退出脚本
Esc:: 
{
    ExitApp
}

Down::Send "{Volume_Down}" ; 按下方向下键发送 Volume_Down 按键
Up::Send "{Volume_Up}" ; 按下方向上键发送 Volume_Up 按键
Left::Send "{Media_Prev}" ; 按下方向左键发送 Media_Prev 按键
Right::Send "{Media_Next}" ; 按下方向右键发送 Media_Next 按键
RShift::Send "{Volume_Mute}" ; 按下右 Shift 键发送 Volume_Mute 按键
Space::Send "{Media_Play_Pause}" ; 按下空格键发送 Media_Play_Pause 按键

Media_Keys.ahk

; 强制使用单例,避免脚本重复运行
#SingleInstance force

; 持续运行脚本
Persistent

; 按下 ESC 键退出脚本
Esc:: 
{
    ExitApp
}

; 添加快捷打开功能
c::Run '"C:\Windows\System32\cmd.exe"'
f::Run '"C:\Program Files\FileZilla FTP Client\filezilla.exe"'
g::Run "https://www.google.com.hk"
j::Run '"C:\Program Files\Joplin\Joplin.exe"'
n::Run 'shell:AppsFolder\19282JackieLiu.Notepads-Beta_echhpq9pdbte8!App'
p::Run '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"'
t::Run 'shell:AppsFolder\Crystalnix.Termius_0m0t0j9spf6x8!Crystalnix.Termius'
v::Run '"C:\Users\me\AppData\Local\Programs\Microsoft VS Code\Code.exe"'

就如同脚本的名字,分别实现了媒体控制键和程序快速启动键,然后使用Ahk2exe工具就能生成对应的Self-contained的可执行文件,此时再使用KeybMap工具添加到注册表即可,如下图

至此就完成了所有配置,此时已经可以卸载上述工具,重启系统或者注销重新登录后即可生效。

当按下对应的媒体键后,Windows会启动响应的脚本可执行文件来实现脚本功能,因为监听和唤起的工作留给了系统,所有并不需要第三方软件常驻后台就能实现快捷键组合。

顺便一提,AutoHotKey不仅易用而且强大,上述脚本稍加修改,即可实现组合键、鼠标/控制器指令、不同窗口不同行为、流程自动化等;同时此思考还可以应用到鼠标侧键或是其他外设,只要驱动程序提供了执行exe的入口即可。

前后花了三个小时实现了预期目标,脚本可能存在不尽人意之处,欢迎大佬们提出修改意见。

参考资料:

借助 AutoHotKey,实现无需驻留后台的快捷键组合

https://www.alpacabro.com/archives/a-way-to-use-ahk.html

作者

alpacabro

发布时间

2024-04-07

许可协议

CC BY 4.0

添加新评论