I'm using Key Down? and Key Up events to turn
the keyboard into a series of switches for a behavioral experiment. For
example, I want the user to push down Caps Lock with the left hand,
Return with the right, then use the appropriate hand to do a specified
task. By monitoring Key Down and Key Up events, I can capture the
timing of the user's "button sequences" (to the accuracy of Window's
clock).
Key Down? provides three indicators of what key is
pressed -- Char, which is an I16 representation of the Ascii character
(and hence can be "converted" easily into a string one could test, e.g.
is this "A"?), VKey, an enum saying if the key is an Ascii character or a
"special" key (such as Caps or Return), and ScanCode, which is another
I16 that corresponds (somehow) to each key on the keyboard. There are
also boolean indicators that can tell you if Ctrl, Shift, or Alt are
being simultaneously pressed. Of these, the least "transparent" is
ScanCode, as there is no obvious way (other than placing a comment on
your code) to know that 58 corresponds to CapsLock.
Unfortunately,
Key Up only provides ScanCode! So while I can write "nice" code that
can more-or-less self-document that I'm testing for Caps Lock or Return
(simply wire VKey to a Case statement, which will allow me to have a
case labelled "Caps", pretty obvious, no?), I don't have such
functionality with the Key Up event.
Suggestion -- add
Char and VKey inputs to the Key Up event! This will make it
"symmetrical" with respect to Key Down?, and will enable producing Key
Up code that doesn't need to rely on "magic numbers" (Scan Codes) for
specific keys.
Bob Schor
Any idea that has received less than 10 kudos within 10 years after posting will be automatically declined.