Dynamically Create AutoHotkey Hotkey to Function/Subroutine

后端 未结 3 1590
孤独总比滥情好
孤独总比滥情好 2021-02-04 17:28

The AutoHotkey command Hotkey allows for the creation of dynamic hotkeys at runtime, but its syntax and documentation seems to limit it to built-in or existing labe

3条回答
  •  我在风中等你
    2021-02-04 18:00

    This is a refinement of FakeRainBrigand's answer. It is used exactly the same:

    Hotkey("x", "Foo", "Bar") ; this defines:  x:: Foo("Bar")
    

    Changes from the original:

    1. Prevent accidental auto-execute of the handler subroutine by tucking it into the function.

    2. Allowing me to reduce namespace pollution by narrowing the scope of the hotkeys variable from global to static.

    3. Optimizations: fun is looked up only once (using Func()) at hotkey definition time; At invocation time, object lookups reduced four to two by splitting hotkeys into two objects funs and args;

    This still relies of course on the _L version of AutoHotKey because of Object notation and variadic 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
    }
    

提交回复
热议问题