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 + jCtrl + jAlt + j,热键直接失效,因为系统认为那是完全不同的组合键。

  • 加上 *(如 *j::):

  • 单独按 j \(\rightarrow\) 触发

  • Shift + j \(\rightarrow\) 触发

  • Ctrl + Shift + j \(\rightarrow\) 依然触发


为什么 * 经常和 {Blind} 搭配使用?

它们是实现自定义按键映射的“黄金搭档”,分工如下:

  1. * 负责“放行触发”:确保不管按住什么修饰键,j 都能被脚本拦截并触发。
  2. {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}"

  1. 触发阶段:因为有 * 通配符,AHK 成功检测到你按下了 Shift + j,开始执行右边的 Send "{Down}"
  2. AHK 的默认思考:AHK 看到你写的是 "{Down}"(而不是 "+{Down}"),它会判定:“主人只想按单纯的 Down 键,但他现在手指还按着 Shift,这会导致发出去变成 Shift+Down,我得帮他修正!”
  3. 后台真实操作
  • AHK 偷偷向系统发送:Shift Up(在系统底层强行松开你的 Shift)。
  • AHK 发送:Down(发出单纯的下方向键)。
  • AHK 偷偷向系统发送:Shift Down(再把 Shift 按回去,恢复你手指的状态)。
  1. 最终结果:由于系统收到了 Shift Up,你的文本选择瞬间中断,只移动了光标。

场景 2:加上 Blind 的写法

*j::Send "{Blind}{Down}"

  1. 触发阶段:有 * 通配符,检测到 Shift + j,开始执行代码。
  2. AHK 的 Blind 思考:AHK 闭上眼睛,不管你手里按着什么,也不做任何多余的修饰键恢复动作。
  3. 后台真实操作
  • AHK 松开 Shift。
  • AHK 直接发送:Down
  1. 最终结果:因为你物理按住的 Shift 处于按下状态,系统接收到的是 Shift 保持按下 + Down 按下,系统将其识别为 Shift + Down(成功连选文本)。

总结

*j::Send "{Blind}{Down}" 命令中,表面定义的发送是 {Down} ,但实际我要的是 Shift + Down ,但 Shift 在 AHK 中是一个“热键”,有特殊作用,如果用各种转义去做,就会很麻烦,容易出错。如果用“透传”就简单多了,简而言之,Shift 在这个命令中,既是触发时的热键,又是发送时的功能键。

把发送任务分成两半去做:操作者按着 shift,AHK 发送 {Down} 共同完成了 shift + down 的操作。

posted @ 2026-08-25 18:05  立体风  阅读(9)  评论(0)    收藏  举报