In my PreviewKeyDown()
handler how do I tell the difference between the ENTER key on number-pad and the ENTER key on the main board?
Both keys return the same value Key.Enter
for KeyEventArgs.Key
.
The closest answer I can find to this question is here: What's the difference between Key.Enter and Key.Return?, but unfortunately this works only if the app is fully trusted.
I'd like a solution without this restriction.
See link, example impl. below.
private static bool IsNumpadEnterKey(KeyEventArgs e)
{
if (e.Key != Key.Enter)
return false;
// To understand the following UGLY implementation please check this MSDN link. Suggested workaround to differentiate between the Return key and Enter key.
// https://social.msdn.microsoft.com/Forums/vstudio/en-US/b59e38f1-38a1-4da9-97ab-c9a648e60af5/whats-the-difference-between-keyenter-and-keyreturn?forum=wpf
try
{
return (bool)typeof(KeyEventArgs).InvokeMember("IsExtendedKey", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance, null, e, null);
}
catch (Exception ex)
{
Log("Could not get the internal IsExtendedKey property from KeyEventArgs. Unable to detect numpad keypresses.", ex);
}
return false;
}
N.b. if you want to check for regular EnterKey then obviously you should calle.Key == Key.Enter && !IsNumpadEnterKey(e)
The scan code is different for every key. You will have to be able to see that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With