AHK中如何通过热键调用自定义命令?能否批量调用?
AHK自定义标签调用问题
我编写了名为grid_command的自定义标签(对应热键为Ctrl+'),代码如下:
grid_command: send {ctrl down}{' down} send {ctrl up}{' up} ToolTipFont("s10", "Segoe UI") ToolTip Toggle Grid SetTimer, RemoveToolTip, 300 return
目前在!g热键的双击逻辑中,我通过重复编写该标签的按键代码实现功能:
!g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) send {ctrl down}{' down} ;<== 注:这段来自grid_command send {ctrl up}{' up} else Menu, PS_Grouping, Show return
我希望采用更简洁的写法直接调用grid_command,但尝试的写法无法运行,确认是send语法有误:
!g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) send {grid_command} ; 想用grid_command代替{ctrl down}{' down}这样的代码 else Menu, PS_Grouping, Show return
现提出两个问题:
- 在AHK中能否实现该调用方式?若可以,具体如何操作?
- 是否支持一次调用多个自定义逻辑,例如:
!g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) send {grid_command} sleep 30 send {another_command} else Menu, PS_Grouping, Show return
问题解答
1. 如何直接调用自定义标签(grid_command)
你当前写的grid_command:是标签(Label),并非AHK的自定义命令,所以不能用send {grid_command}这种方式调用。要实现代码复用,有两种更合适的方案:
方案一:封装为函数
将grid_command的逻辑改成函数,即可直接调用:
grid_command() { send {ctrl down}{' down} send {ctrl up}{' up} ToolTipFont("s10", "Segoe UI") ToolTip Toggle Grid SetTimer, RemoveToolTip, 300 } ; 原热键绑定改为调用函数 ^'::grid_command() ; !g热键中直接调用函数 !g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) grid_command() else Menu, PS_Grouping, Show return
方案二:用Goto跳转标签
如果不想修改为函数,也可以用Goto直接跳到标签执行:
!g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) Goto, grid_command else Menu, PS_Grouping, Show return ; 保留原标签代码 grid_command: send {ctrl down}{' down} send {ctrl up}{' up} ToolTipFont("s10", "Segoe UI") ToolTip Toggle Grid SetTimer, RemoveToolTip, 300 return ; 原热键绑定改为跳转标签 ^'::Goto, grid_command
注意:Goto跳转后,执行完标签内的return会回到原调用位置继续执行(若有后续代码),逻辑和函数调用一致。
2. 能否一次调用多个自定义逻辑?
完全可以,函数或Goto方式都能实现:
函数方式示例
grid_command() { ; 原grid_command逻辑代码 } another_command() { ; 你的另一个自定义逻辑代码 } !g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) { grid_command() sleep 30 another_command() } else { Menu, PS_Grouping, Show } return
Goto方式示例
!g:: If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 400) { Goto, grid_command sleep 30 Goto, another_command } else { Menu, PS_Grouping, Show } return grid_command: ; 原grid_command代码 return another_command: ; 另一个自定义逻辑代码 return
内容的提问来源于stack exchange,提问作者Matsuiko Hiroka
相关产品推荐
相关产品推荐

