如何用Hotkey命令批量启用/禁用多个AutoHotkey热键?
用AutoHotkey的
Hotkey, If批量控制热键启用/禁用 如果你想用Hotkey命令(尤其是Hotkey, If语法)批量切换一组热键的启用状态,不用逐行写Hotkey, 热键名, Toggle,可以按以下方式实现:
方法1:用Hotkey, If定义分组热键
把需要批量控制的热键通过Hotkey命令结合条件变量定义,替代原双冒号语法:
; 定义控制热键组的全局变量,初始为启用状态 Global GroupEnabled := true ; 指定后续热键的生效条件:仅当GroupEnabled为true时触发 Hotkey, If (GroupEnabled) ; 定义组内热键,绑定对应处理标签 Hotkey, a, HotkeyA_Handler, On Hotkey, b, HotkeyB_Handler, On Hotkey, c, HotkeyC_Handler, On ; 热键a的处理逻辑 HotkeyA_Handler: MsgBox 触发热键A return ; 热键b的处理逻辑 HotkeyB_Handler: MsgBox 触发热键B return ; 热键c的处理逻辑 HotkeyC_Handler: MsgBox 触发热键C return
方法2:一键批量切换状态
用Hotkey, If指定目标条件,再通过通配符*批量操作组内所有热键:
F1:: ; 切换控制变量状态 GroupEnabled := !GroupEnabled ; 指定仅对GroupEnabled对应的热键组生效 Hotkey, If (GroupEnabled) ; 批量切换该组下所有热键的启用/禁用状态 Hotkey, *, Toggle return
兼容双冒号热键的方案
如果想保留原双冒号定义的热键,可在脚本启动后重新绑定条件:
Global GroupEnabled := true ; 保留原双冒号热键 ::a::MsgBox 触发热键A ::b::MsgBox 触发热键B ::c::MsgBox 触发热键C ; 脚本启动后,给现有热键绑定分组条件 Hotkey, If (GroupEnabled) Hotkey, a, , On ; 空标签保留原双冒号的处理逻辑 Hotkey, b, , On Hotkey, c, , On F1:: GroupEnabled := !GroupEnabled Hotkey, If (GroupEnabled) Hotkey, *, Toggle return
原理说明
Hotkey, If (Expression)会设置后续Hotkey命令的上下文条件,仅操作符合该条件的热键。Hotkey, *, Toggle中的*是通配符,代表当前条件下的所有热键,实现一键批量切换。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

