自动热键命令Hotkey
允许在运行时创建动态热键,但其语法和文档似乎将其限制为内置或现有标签/子例程,这使得much不太有用:
热键、键名 [、标签、选项]
有没有办法让它像常规的硬编码热键一样工作?例如:
#z::MsgBox foobar ; Typical, hard-coded hotkey pops up a message-box
Hotkey, z, MsgBox foobar ; Nope; complains about missing label “MsgBox foobar”
由于手册中的以下行,它看起来可能是可能的,但尚不清楚它是如何工作的:
标签 - 普通标签和热键/热字符串标签都可以使用。
这是 FakeRainBrigand 答案的改进。它的用法完全相同:
Hotkey("x", "Foo", "Bar") ; this defines: x:: Foo("Bar")
与原文相比的变化:
防止意外自动执行通过将处理程序子例程塞入函数中来实现它。
允许我减少命名空间污染通过缩小范围hotkeys
变量从全局变量变为静态变量。
优化: fun
仅查找一次(使用Func()
) 在热键定义时;在调用时,对象查找通过拆分减少了四到两个hotkeys
分成两个对象funs
and args
;
当然,由于对象表示法和可变参数,这仍然依赖于 AutoHotKey 的 _L 版本arg*
syntax.
Hotkey(hk, fun, arg*) {
Static funs := {}, args := {}
funs[hk] := Func(fun), args[hk] := arg
Hotkey, %hk%, Hotkey_Handle
Return
Hotkey_Handle:
funs[A_ThisHotkey].(args[A_ThisHotkey]*)
Return
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)