autohotkey2.0 盲从模式核心用途 -- 透传
{Blind} 模式的核心价值就是“让按键行为完全由用户的手指或代码决定,杜绝 AHK 后台自作主张的按键干预”。
- 支持组合快捷键的无缝透传(最核心用途)
- 痛点:你把
j改成了Down(向下方向键)。如果不加 Blind,当你按下Shift + j想向下连选文本时,AHK 默认会先松开 Shift,只按一个单纯的下方向键,选区就断了。 - 解决:写成
*j::Send "{Blind}{Down}"。当你按着Shift + j,它就自动变成Shift + Down(选中文本);按着Ctrl + j,就变成Ctrl + Down(跳段落)。
*j::Send "{Blind}{Down}" 命令解读
在热键定义中的 * 是 通配符修饰符(Wildcard modifier)。
它的意思是:无论你当前按住了什么修饰键(Ctrl、Shift、Alt、Win 的任意组合),这个热键都会被触发。
对比说明
-
没有
*(如j::): -
只有在**单独按下
j**时才会触发。 -
如果你按着
Shift + j、Ctrl + j或Alt + j,热键直接失效,因为系统认为那是完全不同的组合键。 -
加上
*(如*j::): -
单独按
j\(\rightarrow\) 触发 -
按
Shift + j\(\rightarrow\) 触发 -
按
Ctrl + Shift + j\(\rightarrow\) 依然触发
为什么 * 经常和 {Blind} 搭配使用?
它们是实现自定义按键映射的“黄金搭档”,分工如下:
*负责“放行触发”:确保不管按住什么修饰键,j都能被脚本拦截并触发。{Blind}负责“原样透传”:把用户手里按着的修饰键,原封不动地叠加到目标按键上。
两者组合后的效果:
| 用户按下的按键 | 最终系统接收到的动作 | 常见应用场景 |
|---|---|---|
j |
Down |
光标向下移动一行 |
Shift + j |
Shift + Down |
向下选中一行文本 |
Ctrl + j |
Ctrl + Down |
光标跳到下一段落 |
Ctrl + Shift + j |
Ctrl + Shift + Down |
选中文本直到下一段落 |
一个疑惑
支持组合快捷键的无缝透传(最核心用途)
痛点:你把 j 改成了 Down(向下方向键)。如果不加 Blind,当你按下 Shift + j 想向下连选文本时,AHK 默认会先松开 Shift,只按一个单纯的下方向键,选区就断了。
解决:写成 *j::Send "{Blind}{Down}"。当你按着 Shift + j,它就自动变成 Shift + Down(选中文本);按着 Ctrl + j,就变成 Ctrl + Down(跳段落)。这里不是太明白,既然按键是 *j 那么按Shift+j 才会触发,AHK 应该不会自动操作吧?
解答
核心的疑惑点在于:“触发热键”与“Send 发送按键”是两套完全独立的逻辑阶段。
*j 仅仅解决了“能否被触发”的问题,而“触发后到底发送了什么按键信号”是由 Send 的规则决定的。
对比两种写法在后台的完整微观过程
假设你的手指正死死按着 Shift + j:
场景 1:不加 Blind 的写法
*j::Send "{Down}"
- 触发阶段:因为有
*通配符,AHK 成功检测到你按下了Shift + j,开始执行右边的Send "{Down}"。 - AHK 的默认思考:AHK 看到你写的是
"{Down}"(而不是"+{Down}"),它会判定:“主人只想按单纯的 Down 键,但他现在手指还按着 Shift,这会导致发出去变成 Shift+Down,我得帮他修正!” - 后台真实操作:
- AHK 偷偷向系统发送:
Shift Up(在系统底层强行松开你的 Shift)。 - AHK 发送:
Down(发出单纯的下方向键)。 - AHK 偷偷向系统发送:
Shift Down(再把 Shift 按回去,恢复你手指的状态)。
- 最终结果:由于系统收到了
Shift Up,你的文本选择瞬间中断,只移动了光标。
场景 2:加上 Blind 的写法
*j::Send "{Blind}{Down}"
- 触发阶段:有
*通配符,检测到Shift + j,开始执行代码。 - AHK 的 Blind 思考:AHK 闭上眼睛,不管你手里按着什么,也不做任何多余的修饰键恢复动作。
- 后台真实操作:
- AHK 不松开 Shift。
- AHK 直接发送:
Down。
- 最终结果:因为你物理按住的
Shift处于按下状态,系统接收到的是Shift 保持按下 + Down 按下,系统将其识别为Shift + Down(成功连选文本)。
总结
*j::Send "{Blind}{Down}" 命令中,表面定义的发送是 {Down} ,但实际我要的是 Shift + Down ,但 Shift 在 AHK 中是一个“热键”,有特殊作用,如果用各种转义去做,就会很麻烦,容易出错。如果用“透传”就简单多了,简而言之,Shift 在这个命令中,既是触发时的热键,又是发送时的功能键。
把发送任务分成两半去做:操作者按着 shift,AHK 发送 {Down} 共同完成了 shift + down 的操作。

浙公网安备 33010602011771号