I may add OnKeyUp. I considered it non-essential because it is used less often, and because it is much easier to detect key-up after being notified of key-down. You can just register one hotkey temporarily or use KeyWait or SetTimer. By contrast, detecting key-down without knowing which key is going to be pressed (and without InputHook) may require hundreds of hotkeys or a long list of keys passed to Input.
With OnKeyUp, it would be trivial for the script to filter out key-repeat (and only slightly more work with some other method of detecting key-up). A built-in option to filter it out would require adding tracking for the key state or repeat status to each individual InputHook, since each InputHook has different conditions for firing OnKeyDown. There is currently 1 bit available per VK/SC, but if that is used, there will be no room for future expansion (of additional per-key options or state).
Why would you expect End
Mods to be non-empty?
EndMods: Returns a string of the modifiers which were logically down when Input was terminated.
If the property worked while Input was in progress, it would only be able to return the current modifier state
, which is what GetKeyState gives you. The point of EndMods is that the modifier state can change between Input ending and OnEnd executing or Wait returning.
Supporting something similar for OnKeyDown would require adding a parameter.