A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

381 lines
12 KiB

// -----------------------------------------------------------------------
// <copyright file="KeyInterop.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Win32.Input
{
using System.Collections.Generic;
using System.Text;
using Perspex.Input;
using Perspex.Win32.Interop;
public static class KeyInterop
{
private static Dictionary<Key, int> virtualKeyFromKey = new Dictionary<Key, int>
{
{ Key.None, 0 },
{ Key.Cancel, 3 },
{ Key.Back, 8 },
{ Key.Tab, 9 },
{ Key.LineFeed, 0 },
{ Key.Clear, 12 },
{ Key.Return, 13 },
{ Key.Pause, 19 },
{ Key.Capital, 20 },
{ Key.KanaMode, 21 },
{ Key.JunjaMode, 23 },
{ Key.FinalMode, 24 },
{ Key.HanjaMode, 25 },
{ Key.Escape, 27 },
{ Key.ImeConvert, 28 },
{ Key.ImeNonConvert, 29 },
{ Key.ImeAccept, 30 },
{ Key.ImeModeChange, 31 },
{ Key.Space, 32 },
{ Key.PageUp, 33 },
{ Key.Next, 34 },
{ Key.End, 35 },
{ Key.Home, 36 },
{ Key.Left, 37 },
{ Key.Up, 38 },
{ Key.Right, 39 },
{ Key.Down, 40 },
{ Key.Select, 41 },
{ Key.Print, 42 },
{ Key.Execute, 43 },
{ Key.Snapshot, 44 },
{ Key.Insert, 45 },
{ Key.Delete, 46 },
{ Key.Help, 47 },
{ Key.D0, 48 },
{ Key.D1, 49 },
{ Key.D2, 50 },
{ Key.D3, 51 },
{ Key.D4, 52 },
{ Key.D5, 53 },
{ Key.D6, 54 },
{ Key.D7, 55 },
{ Key.D8, 56 },
{ Key.D9, 57 },
{ Key.A, 65 },
{ Key.B, 66 },
{ Key.C, 67 },
{ Key.D, 68 },
{ Key.E, 69 },
{ Key.F, 70 },
{ Key.G, 71 },
{ Key.H, 72 },
{ Key.I, 73 },
{ Key.J, 74 },
{ Key.K, 75 },
{ Key.L, 76 },
{ Key.M, 77 },
{ Key.N, 78 },
{ Key.O, 79 },
{ Key.P, 80 },
{ Key.Q, 81 },
{ Key.R, 82 },
{ Key.S, 83 },
{ Key.T, 84 },
{ Key.U, 85 },
{ Key.V, 86 },
{ Key.W, 87 },
{ Key.X, 88 },
{ Key.Y, 89 },
{ Key.Z, 90 },
{ Key.LWin, 91 },
{ Key.RWin, 92 },
{ Key.Apps, 93 },
{ Key.Sleep, 95 },
{ Key.NumPad0, 96 },
{ Key.NumPad1, 97 },
{ Key.NumPad2, 98 },
{ Key.NumPad3, 99 },
{ Key.NumPad4, 100 },
{ Key.NumPad5, 101 },
{ Key.NumPad6, 102 },
{ Key.NumPad7, 103 },
{ Key.NumPad8, 104 },
{ Key.NumPad9, 105 },
{ Key.Multiply, 106 },
{ Key.Add, 107 },
{ Key.Separator, 108 },
{ Key.Subtract, 109 },
{ Key.Decimal, 110 },
{ Key.Divide, 111 },
{ Key.F1, 112 },
{ Key.F2, 113 },
{ Key.F3, 114 },
{ Key.F4, 115 },
{ Key.F5, 116 },
{ Key.F6, 117 },
{ Key.F7, 118 },
{ Key.F8, 119 },
{ Key.F9, 120 },
{ Key.F10, 121 },
{ Key.F11, 122 },
{ Key.F12, 123 },
{ Key.F13, 124 },
{ Key.F14, 125 },
{ Key.F15, 126 },
{ Key.F16, 127 },
{ Key.F17, 128 },
{ Key.F18, 129 },
{ Key.F19, 130 },
{ Key.F20, 131 },
{ Key.F21, 132 },
{ Key.F22, 133 },
{ Key.F23, 134 },
{ Key.F24, 135 },
{ Key.NumLock, 144 },
{ Key.Scroll, 145 },
{ Key.LeftShift, 160 },
{ Key.RightShift, 161 },
{ Key.LeftCtrl, 162 },
{ Key.RightCtrl, 163 },
{ Key.LeftAlt, 164 },
{ Key.RightAlt, 165 },
{ Key.BrowserBack, 166 },
{ Key.BrowserForward, 167 },
{ Key.BrowserRefresh, 168 },
{ Key.BrowserStop, 169 },
{ Key.BrowserSearch, 170 },
{ Key.BrowserFavorites, 171 },
{ Key.BrowserHome, 172 },
{ Key.VolumeMute, 173 },
{ Key.VolumeDown, 174 },
{ Key.VolumeUp, 175 },
{ Key.MediaNextTrack, 176 },
{ Key.MediaPreviousTrack, 177 },
{ Key.MediaStop, 178 },
{ Key.MediaPlayPause, 179 },
{ Key.LaunchMail, 180 },
{ Key.SelectMedia, 181 },
{ Key.LaunchApplication1, 182 },
{ Key.LaunchApplication2, 183 },
{ Key.Oem1, 186 },
{ Key.OemPlus, 187 },
{ Key.OemComma, 188 },
{ Key.OemMinus, 189 },
{ Key.OemPeriod, 190 },
{ Key.OemQuestion, 191 },
{ Key.Oem3, 192 },
{ Key.AbntC1, 193 },
{ Key.AbntC2, 194 },
{ Key.OemOpenBrackets, 219 },
{ Key.Oem5, 220 },
{ Key.Oem6, 221 },
{ Key.OemQuotes, 222 },
{ Key.Oem8, 223 },
{ Key.OemBackslash, 226 },
{ Key.ImeProcessed, 229 },
{ Key.System, 0 },
{ Key.OemAttn, 240 },
{ Key.OemFinish, 241 },
{ Key.OemCopy, 242 },
{ Key.DbeSbcsChar, 243 },
{ Key.OemEnlw, 244 },
{ Key.OemBackTab, 245 },
{ Key.DbeNoRoman, 246 },
{ Key.DbeEnterWordRegisterMode, 247 },
{ Key.DbeEnterImeConfigureMode, 248 },
{ Key.EraseEof, 249 },
{ Key.Play, 250 },
{ Key.DbeNoCodeInput, 251 },
{ Key.NoName, 252 },
{ Key.Pa1, 253 },
{ Key.OemClear, 254 },
{ Key.DeadCharProcessed, 0 },
};
private static Dictionary<int, Key> keyFromVirtualKey = new Dictionary<int, Key>
{
{ 0, Key.None },
{ 3, Key.Cancel },
{ 8, Key.Back },
{ 9, Key.Tab },
{ 12, Key.Clear },
{ 13, Key.Return },
{ 19, Key.Pause },
{ 20, Key.Capital },
{ 21, Key.KanaMode },
{ 23, Key.JunjaMode },
{ 24, Key.FinalMode },
{ 25, Key.HanjaMode },
{ 27, Key.Escape },
{ 28, Key.ImeConvert },
{ 29, Key.ImeNonConvert },
{ 30, Key.ImeAccept },
{ 31, Key.ImeModeChange },
{ 32, Key.Space },
{ 33, Key.PageUp },
{ 34, Key.Next },
{ 35, Key.End },
{ 36, Key.Home },
{ 37, Key.Left },
{ 38, Key.Up },
{ 39, Key.Right },
{ 40, Key.Down },
{ 41, Key.Select },
{ 42, Key.Print },
{ 43, Key.Execute },
{ 44, Key.Snapshot },
{ 45, Key.Insert },
{ 46, Key.Delete },
{ 47, Key.Help },
{ 48, Key.D0 },
{ 49, Key.D1 },
{ 50, Key.D2 },
{ 51, Key.D3 },
{ 52, Key.D4 },
{ 53, Key.D5 },
{ 54, Key.D6 },
{ 55, Key.D7 },
{ 56, Key.D8 },
{ 57, Key.D9 },
{ 65, Key.A },
{ 66, Key.B },
{ 67, Key.C },
{ 68, Key.D },
{ 69, Key.E },
{ 70, Key.F },
{ 71, Key.G },
{ 72, Key.H },
{ 73, Key.I },
{ 74, Key.J },
{ 75, Key.K },
{ 76, Key.L },
{ 77, Key.M },
{ 78, Key.N },
{ 79, Key.O },
{ 80, Key.P },
{ 81, Key.Q },
{ 82, Key.R },
{ 83, Key.S },
{ 84, Key.T },
{ 85, Key.U },
{ 86, Key.V },
{ 87, Key.W },
{ 88, Key.X },
{ 89, Key.Y },
{ 90, Key.Z },
{ 91, Key.LWin },
{ 92, Key.RWin },
{ 93, Key.Apps },
{ 95, Key.Sleep },
{ 96, Key.NumPad0 },
{ 97, Key.NumPad1 },
{ 98, Key.NumPad2 },
{ 99, Key.NumPad3 },
{ 100, Key.NumPad4 },
{ 101, Key.NumPad5 },
{ 102, Key.NumPad6 },
{ 103, Key.NumPad7 },
{ 104, Key.NumPad8 },
{ 105, Key.NumPad9 },
{ 106, Key.Multiply },
{ 107, Key.Add },
{ 108, Key.Separator },
{ 109, Key.Subtract },
{ 110, Key.Decimal },
{ 111, Key.Divide },
{ 112, Key.F1 },
{ 113, Key.F2 },
{ 114, Key.F3 },
{ 115, Key.F4 },
{ 116, Key.F5 },
{ 117, Key.F6 },
{ 118, Key.F7 },
{ 119, Key.F8 },
{ 120, Key.F9 },
{ 121, Key.F10 },
{ 122, Key.F11 },
{ 123, Key.F12 },
{ 124, Key.F13 },
{ 125, Key.F14 },
{ 126, Key.F15 },
{ 127, Key.F16 },
{ 128, Key.F17 },
{ 129, Key.F18 },
{ 130, Key.F19 },
{ 131, Key.F20 },
{ 132, Key.F21 },
{ 133, Key.F22 },
{ 134, Key.F23 },
{ 135, Key.F24 },
{ 144, Key.NumLock },
{ 145, Key.Scroll },
{ 160, Key.LeftShift },
{ 161, Key.RightShift },
{ 162, Key.LeftCtrl },
{ 163, Key.RightCtrl },
{ 164, Key.LeftAlt },
{ 165, Key.RightAlt },
{ 166, Key.BrowserBack },
{ 167, Key.BrowserForward },
{ 168, Key.BrowserRefresh },
{ 169, Key.BrowserStop },
{ 170, Key.BrowserSearch },
{ 171, Key.BrowserFavorites },
{ 172, Key.BrowserHome },
{ 173, Key.VolumeMute },
{ 174, Key.VolumeDown },
{ 175, Key.VolumeUp },
{ 176, Key.MediaNextTrack },
{ 177, Key.MediaPreviousTrack },
{ 178, Key.MediaStop },
{ 179, Key.MediaPlayPause },
{ 180, Key.LaunchMail },
{ 181, Key.SelectMedia },
{ 182, Key.LaunchApplication1 },
{ 183, Key.LaunchApplication2 },
{ 186, Key.Oem1 },
{ 187, Key.OemPlus },
{ 188, Key.OemComma },
{ 189, Key.OemMinus },
{ 190, Key.OemPeriod },
{ 191, Key.OemQuestion },
{ 192, Key.Oem3 },
{ 193, Key.AbntC1 },
{ 194, Key.AbntC2 },
{ 219, Key.OemOpenBrackets },
{ 220, Key.Oem5 },
{ 221, Key.Oem6 },
{ 222, Key.OemQuotes },
{ 223, Key.Oem8 },
{ 226, Key.OemBackslash },
{ 229, Key.ImeProcessed },
{ 240, Key.OemAttn },
{ 241, Key.OemFinish },
{ 242, Key.OemCopy },
{ 243, Key.DbeSbcsChar },
{ 244, Key.OemEnlw },
{ 245, Key.OemBackTab },
{ 246, Key.DbeNoRoman },
{ 247, Key.DbeEnterWordRegisterMode },
{ 248, Key.DbeEnterImeConfigureMode },
{ 249, Key.EraseEof },
{ 250, Key.Play },
{ 251, Key.DbeNoCodeInput },
{ 252, Key.NoName },
{ 253, Key.Pa1 },
{ 254, Key.OemClear },
};
public static Key KeyFromVirtualKey(int virtualKey)
{
Key result;
keyFromVirtualKey.TryGetValue(virtualKey, out result);
return result;
}
public static int VirtualKeyFromKey(Key key)
{
int result;
virtualKeyFromKey.TryGetValue(key, out result);
return result;
}
}
}