背景
最近买的键盘有音量旋钮,但是由于音响的声音太大,日常使用音量仅在1-8之间,这时候Windows的默认调节步幅是2就十分不方便。
搜索后发现微软并未直接提供修改方式,不过找到了使用开源软件AutoHotKey(AHK)来拦截虚拟按键Volume_Down和Volume_Up的方法。
注意:许多游戏声明如果使用AutoHotKey模拟按键可能会导致封号,但本教程只监听了按键,并没有模拟按键输出。我自己玩的无畏契约、CS2、永劫、LOL等游戏都是正常的。
软件下载
软件官网
点击Download v2.0,下面提供的代码无法在v1.1上运行。
代码
点击New script创建一个新的Empty脚本,点击Create然后右键在记事本中编辑.ahk文件,或者点击Edit直接选记事本也行。
将下面的的代码粘贴到.ahk文件中
#NoTrayIcon ;禁用托盘图标
volume(offset) { ;调用显示Windows原始音量条
static o := ComObject("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{00000000-0000-0000-C000-000000000046}")
,q := ComObjQuery(o, "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}", "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}")
qPtr := ComObjValue(q) ; 获取 q 的数值指针
DllCall(NumGet(NumGet(qPtr + 0, "Ptr") + 3 * A_PtrSize, "Ptr"), "Ptr", qPtr, "Int", 0, "UInt", 0)
SoundSetVolume offset
}
; 监听音量增加,并阻止默认行为
Volume_Up::
{
currentVolume := SoundGetVolume() ; 获取当前音量
newVolume := currentVolume +1 ; 调整音量
if (newVolume > 100) ; 限制最大音量为100
newVolume := 100
volume(newVolume)
return ; 阻止按键的默认行为
}
; 监听音量减少,并阻止默认行为
Volume_Down::
{
currentVolume := SoundGetVolume() ; 获取当前音量
newVolume := currentVolume -1 ; 调整音量
if (newVolume < 0) ; 限制最小音量为0
newVolume := 0
volume(newVolume)
return ; 阻止按键的默认行为
}
保存后双击运行,如果没有报错,应该能够在任务管理器中看到一个AutoHotKey后台进程。
此时用旋钮调节音量,可以发现音量步幅已经变为1了。
打包成独立exe文件
AutoHotKey脚本打包成exe之后可以不依赖于软件本身运行,也就是可以卸载它。
点击主界面的Compile,可能会提示需要下载,稍等一会就好。
选择刚刚的.ahk文件,选择64位,再点击Convert,就可以在相同目录下看到.exe文件了。
可以把这个exe文件放到任意位置。
添加开机自动运行
每次开机都要点一下很麻烦,有许多方法可以实现开机自启动,下面介绍一种简单方法。
步骤:
1、按下 Win + R,输入 shell:startup,并按下回车。
2、在弹出的启动文件夹中,将音量步幅调节.exe文件复制到该文件夹中即可。
3、然后重新启动电脑。
如果一切顺利,那么就可以在任务管理器中看到这个软件,占用仅仅2.0MB。
更多
操作系统:Windows 11 24H2
代码中volume函数的前4行是用来调用Windows音量条的,在外网某个论坛找到的,工作原理我也不懂。如果不添加这些,音量调节能正常工作,但是不会显示音量条UI。