KeyInterop.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / System / Windows / Input / KeyInterop.cs / 1 / KeyInterop.cs

                            using MS.Win32; 

using System;

namespace System.Windows.Input 
{
    ///  
    ///     Provides static methods to convert between Win32 VirtualKeys 
    ///     and our Key enum.
    ///  
    public static class KeyInterop
    {
        /// 
        ///     Convert a Win32 VirtualKey into our Key enum. 
        /// 
        public static Key KeyFromVirtualKey(int virtualKey) 
        { 
            Key key = Key.None;
 
            switch(virtualKey)
            {
                case NativeMethods.VK_CANCEL:
                    key = Key.Cancel; 
                    break;
 
                case NativeMethods.VK_BACK: 
                    key = Key.Back;
                    break; 

                case NativeMethods.VK_TAB:
                    key = Key.Tab;
                    break; 

                case NativeMethods.VK_CLEAR: 
                    key = Key.Clear; 
                    break;
 
                case NativeMethods.VK_RETURN:
                    key = Key.Return;
                    break;
 
                case NativeMethods.VK_PAUSE:
                    key = Key.Pause; 
                    break; 

                case NativeMethods.VK_CAPITAL: 
                    key = Key.----;
                    break;

                case NativeMethods.VK_KANA: 
                    key = Key.KanaMode;
                    break; 
 
                case NativeMethods.VK_JUNJA:
                    key = Key.JunjaMode; 
                    break;

                case NativeMethods.VK_FINAL:
                    key = Key.FinalMode; 
                    break;
 
                case NativeMethods.VK_KANJI: 
                    key = Key.KanjiMode;
                    break; 

                case NativeMethods.VK_ESCAPE:
                    key = Key.Escape;
                    break; 

                case NativeMethods.VK_CONVERT: 
                    key = Key.ImeConvert; 
                    break;
 
                case NativeMethods.VK_NONCONVERT:
                    key = Key.ImeNonConvert;
                    break;
 
                case NativeMethods.VK_ACCEPT:
                    key = Key.ImeAccept; 
                    break; 

                case NativeMethods.VK_MODECHANGE: 
                    key = Key.ImeModeChange;
                    break;

                case NativeMethods.VK_SPACE: 
                    key = Key.Space;
                    break; 
 
                case NativeMethods.VK_PRIOR:
                    key = Key.Prior; 
                    break;

                case NativeMethods.VK_NEXT:
                    key = Key.Next; 
                    break;
 
                case NativeMethods.VK_END: 
                    key = Key.End;
                    break; 

                case NativeMethods.VK_HOME:
                    key = Key.Home;
                    break; 

                case NativeMethods.VK_LEFT: 
                    key = Key.Left; 
                    break;
 
                case NativeMethods.VK_UP:
                    key = Key.Up;
                    break;
 
                case NativeMethods.VK_RIGHT:
                    key = Key.Right; 
                    break; 

                case NativeMethods.VK_DOWN: 
                    key = Key.Down;
                    break;

                case NativeMethods.VK_SELECT: 
                    key = Key.Select;
                    break; 
 
                case NativeMethods.VK_PRINT:
                    key = Key.Print; 
                    break;

                case NativeMethods.VK_EXECUTE:
                    key = Key.Execute; 
                    break;
 
                case NativeMethods.VK_SNAPSHOT: 
                    key = Key.Snapshot;
                    break; 

                case NativeMethods.VK_INSERT:
                    key = Key.Insert;
                    break; 

                case NativeMethods.VK_DELETE: 
                    key = Key.Delete; 
                    break;
 
                case NativeMethods.VK_HELP:
                    key = Key.Help;
                    break;
 
                case NativeMethods.VK_0:
                    key = Key.D0; 
                    break; 

                case NativeMethods.VK_1: 
                    key = Key.D1;
                    break;

                case NativeMethods.VK_2: 
                    key = Key.D2;
                    break; 
 
                case NativeMethods.VK_3:
                    key = Key.D3; 
                    break;

                case NativeMethods.VK_4:
                    key = Key.D4; 
                    break;
 
                case NativeMethods.VK_5: 
                    key = Key.D5;
                    break; 

                case NativeMethods.VK_6:
                    key = Key.D6;
                    break; 

                case NativeMethods.VK_7: 
                    key = Key.D7; 
                    break;
 
                case NativeMethods.VK_8:
                    key = Key.D8;
                    break;
 
                case NativeMethods.VK_9:
                    key = Key.D9; 
                    break; 

                case NativeMethods.VK_A: 
                    key = Key.A;
                    break;

                case NativeMethods.VK_B: 
                    key = Key.B;
                    break; 
 
                case NativeMethods.VK_C:
                    key = Key.C; 
                    break;

                case NativeMethods.VK_D:
                    key = Key.D; 
                    break;
 
                case NativeMethods.VK_E: 
                    key = Key.E;
                    break; 

                case NativeMethods.VK_F:
                    key = Key.F;
                    break; 

                case NativeMethods.VK_G: 
                    key = Key.G; 
                    break;
 
                case NativeMethods.VK_H:
                    key = Key.H;
                    break;
 
                case NativeMethods.VK_I:
                    key = Key.I; 
                    break; 

                case NativeMethods.VK_J: 
                    key = Key.J;
                    break;

                case NativeMethods.VK_K: 
                    key = Key.K;
                    break; 
 
                case NativeMethods.VK_L:
                    key = Key.L; 
                    break;

                case NativeMethods.VK_M:
                    key = Key.M; 
                    break;
 
                case NativeMethods.VK_N: 
                    key = Key.N;
                    break; 

                case NativeMethods.VK_O:
                    key = Key.O;
                    break; 

                case NativeMethods.VK_P: 
                    key = Key.P; 
                    break;
 
                case NativeMethods.VK_Q:
                    key = Key.Q;
                    break;
 
                case NativeMethods.VK_R:
                    key = Key.R; 
                    break; 

                case NativeMethods.VK_S: 
                    key = Key.S;
                    break;

                case NativeMethods.VK_T: 
                    key = Key.T;
                    break; 
 
                case NativeMethods.VK_U:
                    key = Key.U; 
                    break;

                case NativeMethods.VK_V:
                    key = Key.V; 
                    break;
 
                case NativeMethods.VK_W: 
                    key = Key.W;
                    break; 

                case NativeMethods.VK_X:
                    key = Key.X;
                    break; 

                case NativeMethods.VK_Y: 
                    key = Key.Y; 
                    break;
 
                case NativeMethods.VK_Z:
                    key = Key.Z;
                    break;
 
                case NativeMethods.VK_LWIN:
                    key = Key.LWin; 
                    break; 

                case NativeMethods.VK_RWIN: 
                    key = Key.RWin;
                    break;

                case NativeMethods.VK_APPS: 
                    key = Key.Apps;
                    break; 
 
                case NativeMethods.VK_SLEEP:
                    key = Key.Sleep; 
                    break;

                case NativeMethods.VK_NUMPAD0:
                    key = Key.NumPad0; 
                    break;
 
                case NativeMethods.VK_NUMPAD1: 
                    key = Key.NumPad1;
                    break; 

                case NativeMethods.VK_NUMPAD2:
                    key = Key.NumPad2;
                    break; 

                case NativeMethods.VK_NUMPAD3: 
                    key = Key.NumPad3; 
                    break;
 
                case NativeMethods.VK_NUMPAD4:
                    key = Key.NumPad4;
                    break;
 
                case NativeMethods.VK_NUMPAD5:
                    key = Key.NumPad5; 
                    break; 

                case NativeMethods.VK_NUMPAD6: 
                    key = Key.NumPad6;
                    break;

                case NativeMethods.VK_NUMPAD7: 
                    key = Key.NumPad7;
                    break; 
 
                case NativeMethods.VK_NUMPAD8:
                    key = Key.NumPad8; 
                    break;

                case NativeMethods.VK_NUMPAD9:
                    key = Key.NumPad9; 
                    break;
 
                case NativeMethods.VK_MULTIPLY: 
                    key = Key.Multiply;
                    break; 

                case NativeMethods.VK_ADD:
                    key = Key.Add;
                    break; 

                case NativeMethods.VK_SEPARATOR: 
                    key = Key.Separator; 
                    break;
 
                case NativeMethods.VK_SUBTRACT:
                    key = Key.Subtract;
                    break;
 
                case NativeMethods.VK_DECIMAL:
                    key = Key.Decimal; 
                    break; 

                case NativeMethods.VK_DIVIDE: 
                    key = Key.Divide;
                    break;

                case NativeMethods.VK_F1: 
                    key = Key.F1;
                    break; 
 
                case NativeMethods.VK_F2:
                    key = Key.F2; 
                    break;

                case NativeMethods.VK_F3:
                    key = Key.F3; 
                    break;
 
                case NativeMethods.VK_F4: 
                    key = Key.F4;
                    break; 

                case NativeMethods.VK_F5:
                    key = Key.F5;
                    break; 

                case NativeMethods.VK_F6: 
                    key = Key.F6; 
                    break;
 
                case NativeMethods.VK_F7:
                    key = Key.F7;
                    break;
 
                case NativeMethods.VK_F8:
                    key = Key.F8; 
                    break; 

                case NativeMethods.VK_F9: 
                    key = Key.F9;
                    break;

                case NativeMethods.VK_F10: 
                    key = Key.F10;
                    break; 
 
                case NativeMethods.VK_F11:
                    key = Key.F11; 
                    break;

                case NativeMethods.VK_F12:
                    key = Key.F12; 
                    break;
 
                case NativeMethods.VK_F13: 
                    key = Key.F13;
                    break; 

                case NativeMethods.VK_F14:
                    key = Key.F14;
                    break; 

                case NativeMethods.VK_F15: 
                    key = Key.F15; 
                    break;
 
                case NativeMethods.VK_F16:
                    key = Key.F16;
                    break;
 
                case NativeMethods.VK_F17:
                    key = Key.F17; 
                    break; 

                case NativeMethods.VK_F18: 
                    key = Key.F18;
                    break;

                case NativeMethods.VK_F19: 
                    key = Key.F19;
                    break; 
 
                case NativeMethods.VK_F20:
                    key = Key.F20; 
                    break;

                case NativeMethods.VK_F21:
                    key = Key.F21; 
                    break;
 
                case NativeMethods.VK_F22: 
                    key = Key.F22;
                    break; 

                case NativeMethods.VK_F23:
                    key = Key.F23;
                    break; 

                case NativeMethods.VK_F24: 
                    key = Key.F24; 
                    break;
 
                case NativeMethods.VK_NUMLOCK:
                    key = Key.NumLock;
                    break;
 
                case NativeMethods.VK_SCROLL:
                    key = Key.Scroll; 
                    break; 

                case NativeMethods.VK_SHIFT: 
                case NativeMethods.VK_LSHIFT:
                    key = Key.LeftShift;
                    break;
 
                case NativeMethods.VK_RSHIFT:
                    key = Key.RightShift; 
                    break; 

                case NativeMethods.VK_CONTROL: 
                case NativeMethods.VK_LCONTROL:
                    key = Key.LeftCtrl;
                    break;
 
                case NativeMethods.VK_RCONTROL:
                    key = Key.RightCtrl; 
                    break; 

                case NativeMethods.VK_MENU: 
                case NativeMethods.VK_LMENU:
                    key = Key.LeftAlt;
                    break;
 
                case NativeMethods.VK_RMENU:
                    key = Key.RightAlt; 
                    break; 

                case NativeMethods.VK_BROWSER_BACK: 
                    key = Key.BrowserBack;
                    break;

                case NativeMethods.VK_BROWSER_FORWARD: 
                    key = Key.BrowserForward;
                    break; 
 
                case NativeMethods.VK_BROWSER_REFRESH:
                    key = Key.BrowserRefresh; 
                    break;

                case NativeMethods.VK_BROWSER_STOP:
                    key = Key.BrowserStop; 
                    break;
 
                case NativeMethods.VK_BROWSER_SEARCH: 
                    key = Key.BrowserSearch;
                    break; 

                case NativeMethods.VK_BROWSER_FAVORITES:
                    key = Key.BrowserFavorites;
                    break; 

                case NativeMethods.VK_BROWSER_HOME: 
                    key = Key.BrowserHome; 
                    break;
 
                case NativeMethods.VK_VOLUME_MUTE:
                    key = Key.VolumeMute;
                    break;
 
                case NativeMethods.VK_VOLUME_DOWN:
                    key = Key.VolumeDown; 
                    break; 

                case NativeMethods.VK_VOLUME_UP: 
                    key = Key.VolumeUp;
                    break;

                case NativeMethods.VK_MEDIA_NEXT_TRACK: 
                    key = Key.MediaNextTrack;
                    break; 
 
                case NativeMethods.VK_MEDIA_PREV_TRACK:
                    key = Key.MediaPreviousTrack; 
                    break;

                case NativeMethods.VK_MEDIA_STOP:
                    key = Key.MediaStop; 
                    break;
 
                case NativeMethods.VK_MEDIA_PLAY_PAUSE: 
                    key = Key.MediaPlayPause;
                    break; 

                case NativeMethods.VK_LAUNCH_MAIL:
                    key = Key.LaunchMail;
                    break; 

                case NativeMethods.VK_LAUNCH_MEDIA_SELECT: 
                    key = Key.SelectMedia; 
                    break;
 
                case NativeMethods.VK_LAUNCH_APP1:
                    key = Key.LaunchApplication1;
                    break;
 
                case NativeMethods.VK_LAUNCH_APP2:
                    key = Key.LaunchApplication2; 
                    break; 

                case NativeMethods.VK_OEM_1: 
                    key = Key.OemSemicolon;
                    break;

                case NativeMethods.VK_OEM_PLUS: 
                    key = Key.OemPlus;
                    break; 
 
                case NativeMethods.VK_OEM_COMMA:
                    key = Key.OemComma; 
                    break;

                case NativeMethods.VK_OEM_MINUS:
                    key = Key.OemMinus; 
                    break;
 
                case NativeMethods.VK_OEM_PERIOD: 
                    key = Key.OemPeriod;
                    break; 

                case NativeMethods.VK_OEM_2:
                    key = Key.OemQuestion;
                    break; 

                case NativeMethods.VK_OEM_3: 
                    key = Key.OemTilde; 
                    break;
 
                case NativeMethods.VK_C1:
                    key = Key.AbntC1;
                    break;
 
                case NativeMethods.VK_C2:
                    key = Key.AbntC2; 
                    break; 

                case NativeMethods.VK_OEM_4: 
                    key = Key.OemOpenBrackets;
                    break;

                case NativeMethods.VK_OEM_5: 
                    key = Key.OemPipe;
                    break; 
 
                case NativeMethods.VK_OEM_6:
                    key = Key.OemCloseBrackets; 
                    break;

                case NativeMethods.VK_OEM_7:
                    key = Key.OemQuotes; 
                    break;
 
                case NativeMethods.VK_OEM_8: 
                    key = Key.Oem8;
                    break; 

                case NativeMethods.VK_OEM_102:
                    key = Key.OemBackslash;
                    break; 

                case NativeMethods.VK_PROCESSKEY: 
                    key = Key.ImeProcessed; 
                    break;
 
                case NativeMethods.VK_OEM_ATTN: // VK_DBE_ALPHANUMERIC
                    key = Key.OemAttn;          // DbeAlphanumeric
                    break;
 
                case NativeMethods.VK_OEM_FINISH: // VK_DBE_KATAKANA
                    key = Key.OemFinish;          // DbeKatakana 
                    break; 

                case NativeMethods.VK_OEM_COPY: // VK_DBE_HIRAGANA 
                    key = Key.OemCopy;          // DbeHiragana
                    break;

                case NativeMethods.VK_OEM_AUTO: // VK_DBE_SBCSCHAR 
                    key = Key.OemAuto;          // DbeSbcsChar
                    break; 
 
                case NativeMethods.VK_OEM_ENLW: // VK_DBE_DBCSCHAR
                    key = Key.OemEnlw;          // DbeDbcsChar 
                    break;

                case NativeMethods.VK_OEM_BACKTAB: // VK_DBE_ROMAN
                    key = Key.OemBackTab;          // DbeRoman 
                    break;
 
                case NativeMethods.VK_ATTN: // VK_DBE_NOROMAN 
                    key = Key.Attn;         // DbeNoRoman
                    break; 

                case NativeMethods.VK_CRSEL: // VK_DBE_ENTERWORDREGISTERMODE
                    key = Key.CrSel;         // DbeEnterWordRegisterMode
                    break; 

                case NativeMethods.VK_EXSEL: // VK_DBE_ENTERIMECONFIGMODE 
                    key = Key.ExSel;         // DbeEnterImeConfigMode 
                    break;
 
                case NativeMethods.VK_EREOF: // VK_DBE_FLUSHSTRING
                    key = Key.EraseEof;      // DbeFlushString
                    break;
 
                case NativeMethods.VK_PLAY: // VK_DBE_CODEINPUT
                    key = Key.Play;         // DbeCodeInput 
                    break; 

                case NativeMethods.VK_ZOOM: // VK_DBE_NOCODEINPUT 
                    key = Key.Zoom;         // DbeNoCodeInput
                    break;

                case NativeMethods.VK_NONAME: // VK_DBE_DETERMINESTRING 
                    key = Key.NoName;         // DbeDetermineString
                    break; 
 
                case NativeMethods.VK_PA1: // VK_DBE_ENTERDLGCONVERSIONMODE
                    key = Key.Pa1;         // DbeEnterDlgConversionMode 
                    break;

                case NativeMethods.VK_OEM_CLEAR:
                    key = Key.OemClear; 
                    break;
 
                default: 
                    key = Key.None;
                    break; 
            }

            return key;
        } 

        ///  
        ///     Convert our Key enum into a Win32 VirtualKey. 
        /// 
        public static int VirtualKeyFromKey(Key key) 
        {
            int virtualKey = 0;

            switch(key) 
            {
                case Key.Cancel: 
                    virtualKey = NativeMethods.VK_CANCEL; 
                    break;
 
                case Key.Back:
                    virtualKey = NativeMethods.VK_BACK;
                    break;
 
                case Key.Tab:
                    virtualKey = NativeMethods.VK_TAB; 
                    break; 

                case Key.Clear: 
                    virtualKey = NativeMethods.VK_CLEAR;
                    break;

                case Key.Return: 
                    virtualKey = NativeMethods.VK_RETURN;
                    break; 
 
                case Key.Pause:
                    virtualKey = NativeMethods.VK_PAUSE; 
                    break;

                case Key.----:
                    virtualKey = NativeMethods.VK_CAPITAL; 
                    break;
 
                case Key.KanaMode: 
                    virtualKey = NativeMethods.VK_KANA;
                    break; 

                case Key.JunjaMode:
                    virtualKey = NativeMethods.VK_JUNJA;
                    break; 

                case Key.FinalMode: 
                    virtualKey = NativeMethods.VK_FINAL; 
                    break;
 
                case Key.KanjiMode:
                    virtualKey = NativeMethods.VK_KANJI;
                    break;
 
                case Key.Escape:
                    virtualKey = NativeMethods.VK_ESCAPE; 
                    break; 

                case Key.ImeConvert: 
                    virtualKey = NativeMethods.VK_CONVERT;
                    break;

                case Key.ImeNonConvert: 
                    virtualKey = NativeMethods.VK_NONCONVERT;
                    break; 
 
                case Key.ImeAccept:
                    virtualKey = NativeMethods.VK_ACCEPT; 
                    break;

                case Key.ImeModeChange:
                    virtualKey = NativeMethods.VK_MODECHANGE; 
                    break;
 
                case Key.Space: 
                    virtualKey = NativeMethods.VK_SPACE;
                    break; 

                case Key.Prior:
                    virtualKey = NativeMethods.VK_PRIOR;
                    break; 

                case Key.Next: 
                    virtualKey = NativeMethods.VK_NEXT; 
                    break;
 
                case Key.End:
                    virtualKey = NativeMethods.VK_END;
                    break;
 
                case Key.Home:
                    virtualKey = NativeMethods.VK_HOME; 
                    break; 

                case Key.Left: 
                    virtualKey = NativeMethods.VK_LEFT;
                    break;

                case Key.Up: 
                    virtualKey = NativeMethods.VK_UP;
                    break; 
 
                case Key.Right:
                    virtualKey = NativeMethods.VK_RIGHT; 
                    break;

                case Key.Down:
                    virtualKey = NativeMethods.VK_DOWN; 
                    break;
 
                case Key.Select: 
                    virtualKey = NativeMethods.VK_SELECT;
                    break; 

                case Key.Print:
                    virtualKey = NativeMethods.VK_PRINT;
                    break; 

                case Key.Execute: 
                    virtualKey = NativeMethods.VK_EXECUTE; 
                    break;
 
                case Key.Snapshot:
                    virtualKey = NativeMethods.VK_SNAPSHOT;
                    break;
 
                case Key.Insert:
                    virtualKey = NativeMethods.VK_INSERT; 
                    break; 

                case Key.Delete: 
                    virtualKey = NativeMethods.VK_DELETE;
                    break;

                case Key.Help: 
                    virtualKey = NativeMethods.VK_HELP;
                    break; 
 
                case Key.D0:
                    virtualKey = NativeMethods.VK_0; 
                    break;

                case Key.D1:
                    virtualKey = NativeMethods.VK_1; 
                    break;
 
                case Key.D2: 
                    virtualKey = NativeMethods.VK_2;
                    break; 

                case Key.D3:
                    virtualKey = NativeMethods.VK_3;
                    break; 

                case Key.D4: 
                    virtualKey = NativeMethods.VK_4; 
                    break;
 
                case Key.D5:
                    virtualKey = NativeMethods.VK_5;
                    break;
 
                case Key.D6:
                    virtualKey = NativeMethods.VK_6; 
                    break; 

                case Key.D7: 
                    virtualKey = NativeMethods.VK_7;
                    break;

                case Key.D8: 
                    virtualKey = NativeMethods.VK_8;
                    break; 
 
                case Key.D9:
                    virtualKey = NativeMethods.VK_9; 
                    break;

                case Key.A:
                    virtualKey = NativeMethods.VK_A; 
                    break;
 
                case Key.B: 
                    virtualKey = NativeMethods.VK_B;
                    break; 

                case Key.C:
                    virtualKey = NativeMethods.VK_C;
                    break; 

                case Key.D: 
                    virtualKey = NativeMethods.VK_D; 
                    break;
 
                case Key.E:
                    virtualKey = NativeMethods.VK_E;
                    break;
 
                case Key.F:
                    virtualKey = NativeMethods.VK_F; 
                    break; 

                case Key.G: 
                    virtualKey = NativeMethods.VK_G;
                    break;

                case Key.H: 
                    virtualKey = NativeMethods.VK_H;
                    break; 
 
                case Key.I:
                    virtualKey = NativeMethods.VK_I; 
                    break;

                case Key.J:
                    virtualKey = NativeMethods.VK_J; 
                    break;
 
                case Key.K: 
                    virtualKey = NativeMethods.VK_K;
                    break; 

                case Key.L:
                    virtualKey = NativeMethods.VK_L;
                    break; 

                case Key.M: 
                    virtualKey = NativeMethods.VK_M; 
                    break;
 
                case Key.N:
                    virtualKey = NativeMethods.VK_N;
                    break;
 
                case Key.O:
                    virtualKey = NativeMethods.VK_O; 
                    break; 

                case Key.P: 
                    virtualKey = NativeMethods.VK_P;
                    break;

                case Key.Q: 
                    virtualKey = NativeMethods.VK_Q;
                    break; 
 
                case Key.R:
                    virtualKey = NativeMethods.VK_R; 
                    break;

                case Key.S:
                    virtualKey = NativeMethods.VK_S; 
                    break;
 
                case Key.T: 
                    virtualKey = NativeMethods.VK_T;
                    break; 

                case Key.U:
                    virtualKey = NativeMethods.VK_U;
                    break; 

                case Key.V: 
                    virtualKey = NativeMethods.VK_V; 
                    break;
 
                case Key.W:
                    virtualKey = NativeMethods.VK_W;
                    break;
 
                case Key.X:
                    virtualKey = NativeMethods.VK_X; 
                    break; 

                case Key.Y: 
                    virtualKey = NativeMethods.VK_Y;
                    break;

                case Key.Z: 
                    virtualKey = NativeMethods.VK_Z;
                    break; 
 
                case Key.LWin:
                    virtualKey = NativeMethods.VK_LWIN; 
                    break;

                case Key.RWin:
                    virtualKey = NativeMethods.VK_RWIN; 
                    break;
 
                case Key.Apps: 
                    virtualKey = NativeMethods.VK_APPS;
                    break; 

                case Key.Sleep:
                    virtualKey = NativeMethods.VK_SLEEP;
                    break; 

                case Key.NumPad0: 
                    virtualKey = NativeMethods.VK_NUMPAD0; 
                    break;
 
                case Key.NumPad1:
                    virtualKey = NativeMethods.VK_NUMPAD1;
                    break;
 
                case Key.NumPad2:
                    virtualKey = NativeMethods.VK_NUMPAD2; 
                    break; 

                case Key.NumPad3: 
                    virtualKey = NativeMethods.VK_NUMPAD3;
                    break;

                case Key.NumPad4: 
                    virtualKey = NativeMethods.VK_NUMPAD4;
                    break; 
 
                case Key.NumPad5:
                    virtualKey = NativeMethods.VK_NUMPAD5; 
                    break;

                case Key.NumPad6:
                    virtualKey = NativeMethods.VK_NUMPAD6; 
                    break;
 
                case Key.NumPad7: 
                    virtualKey = NativeMethods.VK_NUMPAD7;
                    break; 

                case Key.NumPad8:
                    virtualKey = NativeMethods.VK_NUMPAD8;
                    break; 

                case Key.NumPad9: 
                    virtualKey = NativeMethods.VK_NUMPAD9; 
                    break;
 
                case Key.Multiply:
                    virtualKey = NativeMethods.VK_MULTIPLY;
                    break;
 
                case Key.Add:
                    virtualKey = NativeMethods.VK_ADD; 
                    break; 

                case Key.Separator: 
                    virtualKey = NativeMethods.VK_SEPARATOR;
                    break;

                case Key.Subtract: 
                    virtualKey = NativeMethods.VK_SUBTRACT;
                    break; 
 
                case Key.Decimal:
                    virtualKey = NativeMethods.VK_DECIMAL; 
                    break;

                case Key.Divide:
                    virtualKey = NativeMethods.VK_DIVIDE; 
                    break;
 
                case Key.F1: 
                    virtualKey = NativeMethods.VK_F1;
                    break; 

                case Key.F2:
                    virtualKey = NativeMethods.VK_F2;
                    break; 

                case Key.F3: 
                    virtualKey = NativeMethods.VK_F3; 
                    break;
 
                case Key.F4:
                    virtualKey = NativeMethods.VK_F4;
                    break;
 
                case Key.F5:
                    virtualKey = NativeMethods.VK_F5; 
                    break; 

                case Key.F6: 
                    virtualKey = NativeMethods.VK_F6;
                    break;

                case Key.F7: 
                    virtualKey = NativeMethods.VK_F7;
                    break; 
 
                case Key.F8:
                    virtualKey = NativeMethods.VK_F8; 
                    break;

                case Key.F9:
                    virtualKey = NativeMethods.VK_F9; 
                    break;
 
                case Key.F10: 
                    virtualKey = NativeMethods.VK_F10;
                    break; 

                case Key.F11:
                    virtualKey = NativeMethods.VK_F11;
                    break; 

                case Key.F12: 
                    virtualKey = NativeMethods.VK_F12; 
                    break;
 
                case Key.F13:
                    virtualKey = NativeMethods.VK_F13;
                    break;
 
                case Key.F14:
                    virtualKey = NativeMethods.VK_F14; 
                    break; 

                case Key.F15: 
                    virtualKey = NativeMethods.VK_F15;
                    break;

                case Key.F16: 
                    virtualKey = NativeMethods.VK_F16;
                    break; 
 
                case Key.F17:
                    virtualKey = NativeMethods.VK_F17; 
                    break;

                case Key.F18:
                    virtualKey = NativeMethods.VK_F18; 
                    break;
 
                case Key.F19: 
                    virtualKey = NativeMethods.VK_F19;
                    break; 

                case Key.F20:
                    virtualKey = NativeMethods.VK_F20;
                    break; 

                case Key.F21: 
                    virtualKey = NativeMethods.VK_F21; 
                    break;
 
                case Key.F22:
                    virtualKey = NativeMethods.VK_F22;
                    break;
 
                case Key.F23:
                    virtualKey = NativeMethods.VK_F23; 
                    break; 

                case Key.F24: 
                    virtualKey = NativeMethods.VK_F24;
                    break;

                case Key.NumLock: 
                    virtualKey = NativeMethods.VK_NUMLOCK;
                    break; 
 
                case Key.Scroll:
                    virtualKey = NativeMethods.VK_SCROLL; 
                    break;

                case Key.LeftShift:
                    virtualKey = NativeMethods.VK_LSHIFT; 
                    break;
 
                case Key.RightShift: 
                    virtualKey = NativeMethods.VK_RSHIFT;
                    break; 

                case Key.LeftCtrl:
                    virtualKey = NativeMethods.VK_LCONTROL;
                    break; 

                case Key.RightCtrl: 
                    virtualKey = NativeMethods.VK_RCONTROL; 
                    break;
 
                case Key.LeftAlt:
                    virtualKey = NativeMethods.VK_LMENU;
                    break;
 
                case Key.RightAlt:
                    virtualKey = NativeMethods.VK_RMENU; 
                    break; 

                case Key.BrowserBack: 
                    virtualKey = NativeMethods.VK_BROWSER_BACK;
                    break;

                case Key.BrowserForward: 
                    virtualKey = NativeMethods.VK_BROWSER_FORWARD;
                    break; 
 
                case Key.BrowserRefresh:
                    virtualKey = NativeMethods.VK_BROWSER_REFRESH; 
                    break;

                case Key.BrowserStop:
                    virtualKey = NativeMethods.VK_BROWSER_STOP; 
                    break;
 
                case Key.BrowserSearch: 
                    virtualKey = NativeMethods.VK_BROWSER_SEARCH;
                    break; 

                case Key.BrowserFavorites:
                    virtualKey = NativeMethods.VK_BROWSER_FAVORITES;
                    break; 

                case Key.BrowserHome: 
                    virtualKey = NativeMethods.VK_BROWSER_HOME; 
                    break;
 
                case Key.VolumeMute:
                    virtualKey = NativeMethods.VK_VOLUME_MUTE;
                    break;
 
                case Key.VolumeDown:
                    virtualKey = NativeMethods.VK_VOLUME_DOWN; 
                    break; 

                case Key.VolumeUp: 
                    virtualKey = NativeMethods.VK_VOLUME_UP;
                    break;

                case Key.MediaNextTrack: 
                    virtualKey = NativeMethods.VK_MEDIA_NEXT_TRACK;
                    break; 
 
                case Key.MediaPreviousTrack:
                    virtualKey = NativeMethods.VK_MEDIA_PREV_TRACK; 
                    break;

                case Key.MediaStop:
                    virtualKey = NativeMethods.VK_MEDIA_STOP; 
                    break;
 
                case Key.MediaPlayPause: 
                    virtualKey = NativeMethods.VK_MEDIA_PLAY_PAUSE;
                    break; 

                case Key.LaunchMail:
                    virtualKey = NativeMethods.VK_LAUNCH_MAIL;
                    break; 

                case Key.SelectMedia: 
                    virtualKey = NativeMethods.VK_LAUNCH_MEDIA_SELECT; 
                    break;
 
                case Key.LaunchApplication1:
                    virtualKey = NativeMethods.VK_LAUNCH_APP1;
                    break;
 
                case Key.LaunchApplication2:
                    virtualKey = NativeMethods.VK_LAUNCH_APP2; 
                    break; 

                case Key.OemSemicolon: 
                    virtualKey = NativeMethods.VK_OEM_1;
                    break;

                case Key.OemPlus: 
                    virtualKey = NativeMethods.VK_OEM_PLUS;
                    break; 
 
                case Key.OemComma:
                    virtualKey = NativeMethods.VK_OEM_COMMA; 
                    break;

                case Key.OemMinus:
                    virtualKey = NativeMethods.VK_OEM_MINUS; 
                    break;
 
                case Key.OemPeriod: 
                    virtualKey = NativeMethods.VK_OEM_PERIOD;
                    break; 

                case Key.OemQuestion:
                    virtualKey = NativeMethods.VK_OEM_2;
                    break; 

                case Key.OemTilde: 
                    virtualKey = NativeMethods.VK_OEM_3; 
                    break;
 
                case Key.AbntC1:
                    virtualKey = NativeMethods.VK_C1;
                    break;
 
                case Key.AbntC2:
                    virtualKey = NativeMethods.VK_C2; 
                    break; 

                case Key.OemOpenBrackets: 
                    virtualKey = NativeMethods.VK_OEM_4;
                    break;

                case Key.OemPipe: 
                    virtualKey = NativeMethods.VK_OEM_5;
                    break; 
 
                case Key.OemCloseBrackets:
                    virtualKey = NativeMethods.VK_OEM_6; 
                    break;

                case Key.OemQuotes:
                    virtualKey = NativeMethods.VK_OEM_7; 
                    break;
 
                case Key.Oem8: 
                    virtualKey = NativeMethods.VK_OEM_8;
                    break; 

                case Key.OemBackslash:
                    virtualKey = NativeMethods.VK_OEM_102;
                    break; 

                case Key.ImeProcessed: 
                    virtualKey = NativeMethods.VK_PROCESSKEY; 
                    break;
 
                case Key.OemAttn:                           // DbeAlphanumeric
                    virtualKey = NativeMethods.VK_OEM_ATTN; // VK_DBE_ALPHANUMERIC
                    break;
 
                case Key.OemFinish:                           // DbeKatakana
                    virtualKey = NativeMethods.VK_OEM_FINISH; // VK_DBE_KATAKANA 
                    break; 

                case Key.OemCopy:                           // DbeHiragana 
                    virtualKey = NativeMethods.VK_OEM_COPY; // VK_DBE_HIRAGANA
                    break;

                case Key.OemAuto:                           // DbeSbcsChar 
                    virtualKey = NativeMethods.VK_OEM_AUTO; // VK_DBE_SBCSCHAR
                    break; 
 
                case Key.OemEnlw:                           // DbeDbcsChar
                    virtualKey = NativeMethods.VK_OEM_ENLW; // VK_DBE_DBCSCHAR 
                    break;

                case Key.OemBackTab:                           // DbeRoman
                    virtualKey = NativeMethods.VK_OEM_BACKTAB; // VK_DBE_ROMAN 
                    break;
 
                case Key.Attn:                          // DbeNoRoman 
                    virtualKey = NativeMethods.VK_ATTN; // VK_DBE_NOROMAN
                    break; 

                case Key.CrSel:                          // DbeEnterWordRegisterMode
                    virtualKey = NativeMethods.VK_CRSEL; // VK_DBE_ENTERWORDREGISTERMODE
                    break; 

                case Key.ExSel:                          // EnterImeConfigureMode 
                    virtualKey = NativeMethods.VK_EXSEL; // VK_DBE_ENTERIMECONFIGMODE 
                    break;
 
                case Key.EraseEof:                       // DbeFlushString
                    virtualKey = NativeMethods.VK_EREOF; // VK_DBE_FLUSHSTRING
                    break;
 
                case Key.Play:                           // DbeCodeInput
                    virtualKey = NativeMethods.VK_PLAY;  // VK_DBE_CODEINPUT 
                    break; 

                case Key.Zoom:                           // DbeNoCodeInput 
                    virtualKey = NativeMethods.VK_ZOOM;  // VK_DBE_NOCODEINPUT
                    break;

                case Key.NoName:                          // DbeDetermineString 
                    virtualKey = NativeMethods.VK_NONAME; // VK_DBE_DETERMINESTRING
                    break; 
 
                case Key.Pa1:                          // DbeEnterDlgConversionMode
                    virtualKey = NativeMethods.VK_PA1; // VK_ENTERDLGCONVERSIONMODE 
                    break;

                case Key.OemClear:
                    virtualKey = NativeMethods.VK_OEM_CLEAR; 
                    break;
 
                default: 
                    virtualKey = 0;
                    break; 
            }

            return virtualKey;
        } 
    }
} 
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
 using MS.Win32; 

using System;

namespace System.Windows.Input 
{
    ///  
    ///     Provides static methods to convert between Win32 VirtualKeys 
    ///     and our Key enum.
    ///  
    public static class KeyInterop
    {
        /// 
        ///     Convert a Win32 VirtualKey into our Key enum. 
        /// 
        public static Key KeyFromVirtualKey(int virtualKey) 
        { 
            Key key = Key.None;
 
            switch(virtualKey)
            {
                case NativeMethods.VK_CANCEL:
                    key = Key.Cancel; 
                    break;
 
                case NativeMethods.VK_BACK: 
                    key = Key.Back;
                    break; 

                case NativeMethods.VK_TAB:
                    key = Key.Tab;
                    break; 

                case NativeMethods.VK_CLEAR: 
                    key = Key.Clear; 
                    break;
 
                case NativeMethods.VK_RETURN:
                    key = Key.Return;
                    break;
 
                case NativeMethods.VK_PAUSE:
                    key = Key.Pause; 
                    break; 

                case NativeMethods.VK_CAPITAL: 
                    key = Key.----;
                    break;

                case NativeMethods.VK_KANA: 
                    key = Key.KanaMode;
                    break; 
 
                case NativeMethods.VK_JUNJA:
                    key = Key.JunjaMode; 
                    break;

                case NativeMethods.VK_FINAL:
                    key = Key.FinalMode; 
                    break;
 
                case NativeMethods.VK_KANJI: 
                    key = Key.KanjiMode;
                    break; 

                case NativeMethods.VK_ESCAPE:
                    key = Key.Escape;
                    break; 

                case NativeMethods.VK_CONVERT: 
                    key = Key.ImeConvert; 
                    break;
 
                case NativeMethods.VK_NONCONVERT:
                    key = Key.ImeNonConvert;
                    break;
 
                case NativeMethods.VK_ACCEPT:
                    key = Key.ImeAccept; 
                    break; 

                case NativeMethods.VK_MODECHANGE: 
                    key = Key.ImeModeChange;
                    break;

                case NativeMethods.VK_SPACE: 
                    key = Key.Space;
                    break; 
 
                case NativeMethods.VK_PRIOR:
                    key = Key.Prior; 
                    break;

                case NativeMethods.VK_NEXT:
                    key = Key.Next; 
                    break;
 
                case NativeMethods.VK_END: 
                    key = Key.End;
                    break; 

                case NativeMethods.VK_HOME:
                    key = Key.Home;
                    break; 

                case NativeMethods.VK_LEFT: 
                    key = Key.Left; 
                    break;
 
                case NativeMethods.VK_UP:
                    key = Key.Up;
                    break;
 
                case NativeMethods.VK_RIGHT:
                    key = Key.Right; 
                    break; 

                case NativeMethods.VK_DOWN: 
                    key = Key.Down;
                    break;

                case NativeMethods.VK_SELECT: 
                    key = Key.Select;
                    break; 
 
                case NativeMethods.VK_PRINT:
                    key = Key.Print; 
                    break;

                case NativeMethods.VK_EXECUTE:
                    key = Key.Execute; 
                    break;
 
                case NativeMethods.VK_SNAPSHOT: 
                    key = Key.Snapshot;
                    break; 

                case NativeMethods.VK_INSERT:
                    key = Key.Insert;
                    break; 

                case NativeMethods.VK_DELETE: 
                    key = Key.Delete; 
                    break;
 
                case NativeMethods.VK_HELP:
                    key = Key.Help;
                    break;
 
                case NativeMethods.VK_0:
                    key = Key.D0; 
                    break; 

                case NativeMethods.VK_1: 
                    key = Key.D1;
                    break;

                case NativeMethods.VK_2: 
                    key = Key.D2;
                    break; 
 
                case NativeMethods.VK_3:
                    key = Key.D3; 
                    break;

                case NativeMethods.VK_4:
                    key = Key.D4; 
                    break;
 
                case NativeMethods.VK_5: 
                    key = Key.D5;
                    break; 

                case NativeMethods.VK_6:
                    key = Key.D6;
                    break; 

                case NativeMethods.VK_7: 
                    key = Key.D7; 
                    break;
 
                case NativeMethods.VK_8:
                    key = Key.D8;
                    break;
 
                case NativeMethods.VK_9:
                    key = Key.D9; 
                    break; 

                case NativeMethods.VK_A: 
                    key = Key.A;
                    break;

                case NativeMethods.VK_B: 
                    key = Key.B;
                    break; 
 
                case NativeMethods.VK_C:
                    key = Key.C; 
                    break;

                case NativeMethods.VK_D:
                    key = Key.D; 
                    break;
 
                case NativeMethods.VK_E: 
                    key = Key.E;
                    break; 

                case NativeMethods.VK_F:
                    key = Key.F;
                    break; 

                case NativeMethods.VK_G: 
                    key = Key.G; 
                    break;
 
                case NativeMethods.VK_H:
                    key = Key.H;
                    break;
 
                case NativeMethods.VK_I:
                    key = Key.I; 
                    break; 

                case NativeMethods.VK_J: 
                    key = Key.J;
                    break;

                case NativeMethods.VK_K: 
                    key = Key.K;
                    break; 
 
                case NativeMethods.VK_L:
                    key = Key.L; 
                    break;

                case NativeMethods.VK_M:
                    key = Key.M; 
                    break;
 
                case NativeMethods.VK_N: 
                    key = Key.N;
                    break; 

                case NativeMethods.VK_O:
                    key = Key.O;
                    break; 

                case NativeMethods.VK_P: 
                    key = Key.P; 
                    break;
 
                case NativeMethods.VK_Q:
                    key = Key.Q;
                    break;
 
                case NativeMethods.VK_R:
                    key = Key.R; 
                    break; 

                case NativeMethods.VK_S: 
                    key = Key.S;
                    break;

                case NativeMethods.VK_T: 
                    key = Key.T;
                    break; 
 
                case NativeMethods.VK_U:
                    key = Key.U; 
                    break;

                case NativeMethods.VK_V:
                    key = Key.V; 
                    break;
 
                case NativeMethods.VK_W: 
                    key = Key.W;
                    break; 

                case NativeMethods.VK_X:
                    key = Key.X;
                    break; 

                case NativeMethods.VK_Y: 
                    key = Key.Y; 
                    break;
 
                case NativeMethods.VK_Z:
                    key = Key.Z;
                    break;
 
                case NativeMethods.VK_LWIN:
                    key = Key.LWin; 
                    break; 

                case NativeMethods.VK_RWIN: 
                    key = Key.RWin;
                    break;

                case NativeMethods.VK_APPS: 
                    key = Key.Apps;
                    break; 
 
                case NativeMethods.VK_SLEEP:
                    key = Key.Sleep; 
                    break;

                case NativeMethods.VK_NUMPAD0:
                    key = Key.NumPad0; 
                    break;
 
                case NativeMethods.VK_NUMPAD1: 
                    key = Key.NumPad1;
                    break; 

                case NativeMethods.VK_NUMPAD2:
                    key = Key.NumPad2;
                    break; 

                case NativeMethods.VK_NUMPAD3: 
                    key = Key.NumPad3; 
                    break;
 
                case NativeMethods.VK_NUMPAD4:
                    key = Key.NumPad4;
                    break;
 
                case NativeMethods.VK_NUMPAD5:
                    key = Key.NumPad5; 
                    break; 

                case NativeMethods.VK_NUMPAD6: 
                    key = Key.NumPad6;
                    break;

                case NativeMethods.VK_NUMPAD7: 
                    key = Key.NumPad7;
                    break; 
 
                case NativeMethods.VK_NUMPAD8:
                    key = Key.NumPad8; 
                    break;

                case NativeMethods.VK_NUMPAD9:
                    key = Key.NumPad9; 
                    break;
 
                case NativeMethods.VK_MULTIPLY: 
                    key = Key.Multiply;
                    break; 

                case NativeMethods.VK_ADD:
                    key = Key.Add;
                    break; 

                case NativeMethods.VK_SEPARATOR: 
                    key = Key.Separator; 
                    break;
 
                case NativeMethods.VK_SUBTRACT:
                    key = Key.Subtract;
                    break;
 
                case NativeMethods.VK_DECIMAL:
                    key = Key.Decimal; 
                    break; 

                case NativeMethods.VK_DIVIDE: 
                    key = Key.Divide;
                    break;

                case NativeMethods.VK_F1: 
                    key = Key.F1;
                    break; 
 
                case NativeMethods.VK_F2:
                    key = Key.F2; 
                    break;

                case NativeMethods.VK_F3:
                    key = Key.F3; 
                    break;
 
                case NativeMethods.VK_F4: 
                    key = Key.F4;
                    break; 

                case NativeMethods.VK_F5:
                    key = Key.F5;
                    break; 

                case NativeMethods.VK_F6: 
                    key = Key.F6; 
                    break;
 
                case NativeMethods.VK_F7:
                    key = Key.F7;
                    break;
 
                case NativeMethods.VK_F8:
                    key = Key.F8; 
                    break; 

                case NativeMethods.VK_F9: 
                    key = Key.F9;
                    break;

                case NativeMethods.VK_F10: 
                    key = Key.F10;
                    break; 
 
                case NativeMethods.VK_F11:
                    key = Key.F11; 
                    break;

                case NativeMethods.VK_F12:
                    key = Key.F12; 
                    break;
 
                case NativeMethods.VK_F13: 
                    key = Key.F13;
                    break; 

                case NativeMethods.VK_F14:
                    key = Key.F14;
                    break; 

                case NativeMethods.VK_F15: 
                    key = Key.F15; 
                    break;
 
                case NativeMethods.VK_F16:
                    key = Key.F16;
                    break;
 
                case NativeMethods.VK_F17:
                    key = Key.F17; 
                    break; 

                case NativeMethods.VK_F18: 
                    key = Key.F18;
                    break;

                case NativeMethods.VK_F19: 
                    key = Key.F19;
                    break; 
 
                case NativeMethods.VK_F20:
                    key = Key.F20; 
                    break;

                case NativeMethods.VK_F21:
                    key = Key.F21; 
                    break;
 
                case NativeMethods.VK_F22: 
                    key = Key.F22;
                    break; 

                case NativeMethods.VK_F23:
                    key = Key.F23;
                    break; 

                case NativeMethods.VK_F24: 
                    key = Key.F24; 
                    break;
 
                case NativeMethods.VK_NUMLOCK:
                    key = Key.NumLock;
                    break;
 
                case NativeMethods.VK_SCROLL:
                    key = Key.Scroll; 
                    break; 

                case NativeMethods.VK_SHIFT: 
                case NativeMethods.VK_LSHIFT:
                    key = Key.LeftShift;
                    break;
 
                case NativeMethods.VK_RSHIFT:
                    key = Key.RightShift; 
                    break; 

                case NativeMethods.VK_CONTROL: 
                case NativeMethods.VK_LCONTROL:
                    key = Key.LeftCtrl;
                    break;
 
                case NativeMethods.VK_RCONTROL:
                    key = Key.RightCtrl; 
                    break; 

                case NativeMethods.VK_MENU: 
                case NativeMethods.VK_LMENU:
                    key = Key.LeftAlt;
                    break;
 
                case NativeMethods.VK_RMENU:
                    key = Key.RightAlt; 
                    break; 

                case NativeMethods.VK_BROWSER_BACK: 
                    key = Key.BrowserBack;
                    break;

                case NativeMethods.VK_BROWSER_FORWARD: 
                    key = Key.BrowserForward;
                    break; 
 
                case NativeMethods.VK_BROWSER_REFRESH:
                    key = Key.BrowserRefresh; 
                    break;

                case NativeMethods.VK_BROWSER_STOP:
                    key = Key.BrowserStop; 
                    break;
 
                case NativeMethods.VK_BROWSER_SEARCH: 
                    key = Key.BrowserSearch;
                    break; 

                case NativeMethods.VK_BROWSER_FAVORITES:
                    key = Key.BrowserFavorites;
                    break; 

                case NativeMethods.VK_BROWSER_HOME: 
                    key = Key.BrowserHome; 
                    break;
 
                case NativeMethods.VK_VOLUME_MUTE:
                    key = Key.VolumeMute;
                    break;
 
                case NativeMethods.VK_VOLUME_DOWN:
                    key = Key.VolumeDown; 
                    break; 

                case NativeMethods.VK_VOLUME_UP: 
                    key = Key.VolumeUp;
                    break;

                case NativeMethods.VK_MEDIA_NEXT_TRACK: 
                    key = Key.MediaNextTrack;
                    break; 
 
                case NativeMethods.VK_MEDIA_PREV_TRACK:
                    key = Key.MediaPreviousTrack; 
                    break;

                case NativeMethods.VK_MEDIA_STOP:
                    key = Key.MediaStop; 
                    break;
 
                case NativeMethods.VK_MEDIA_PLAY_PAUSE: 
                    key = Key.MediaPlayPause;
                    break; 

                case NativeMethods.VK_LAUNCH_MAIL:
                    key = Key.LaunchMail;
                    break; 

                case NativeMethods.VK_LAUNCH_MEDIA_SELECT: 
                    key = Key.SelectMedia; 
                    break;
 
                case NativeMethods.VK_LAUNCH_APP1:
                    key = Key.LaunchApplication1;
                    break;
 
                case NativeMethods.VK_LAUNCH_APP2:
                    key = Key.LaunchApplication2; 
                    break; 

                case NativeMethods.VK_OEM_1: 
                    key = Key.OemSemicolon;
                    break;

                case NativeMethods.VK_OEM_PLUS: 
                    key = Key.OemPlus;
                    break; 
 
                case NativeMethods.VK_OEM_COMMA:
                    key = Key.OemComma; 
                    break;

                case NativeMethods.VK_OEM_MINUS:
                    key = Key.OemMinus; 
                    break;
 
                case NativeMethods.VK_OEM_PERIOD: 
                    key = Key.OemPeriod;
                    break; 

                case NativeMethods.VK_OEM_2:
                    key = Key.OemQuestion;
                    break; 

                case NativeMethods.VK_OEM_3: 
                    key = Key.OemTilde; 
                    break;
 
                case NativeMethods.VK_C1:
                    key = Key.AbntC1;
                    break;
 
                case NativeMethods.VK_C2:
                    key = Key.AbntC2; 
                    break; 

                case NativeMethods.VK_OEM_4: 
                    key = Key.OemOpenBrackets;
                    break;

                case NativeMethods.VK_OEM_5: 
                    key = Key.OemPipe;
                    break; 
 
                case NativeMethods.VK_OEM_6:
                    key = Key.OemCloseBrackets; 
                    break;

                case NativeMethods.VK_OEM_7:
                    key = Key.OemQuotes; 
                    break;
 
                case NativeMethods.VK_OEM_8: 
                    key = Key.Oem8;
                    break; 

                case NativeMethods.VK_OEM_102:
                    key = Key.OemBackslash;
                    break; 

                case NativeMethods.VK_PROCESSKEY: 
                    key = Key.ImeProcessed; 
                    break;
 
                case NativeMethods.VK_OEM_ATTN: // VK_DBE_ALPHANUMERIC
                    key = Key.OemAttn;          // DbeAlphanumeric
                    break;
 
                case NativeMethods.VK_OEM_FINISH: // VK_DBE_KATAKANA
                    key = Key.OemFinish;          // DbeKatakana 
                    break; 

                case NativeMethods.VK_OEM_COPY: // VK_DBE_HIRAGANA 
                    key = Key.OemCopy;          // DbeHiragana
                    break;

                case NativeMethods.VK_OEM_AUTO: // VK_DBE_SBCSCHAR 
                    key = Key.OemAuto;          // DbeSbcsChar
                    break; 
 
                case NativeMethods.VK_OEM_ENLW: // VK_DBE_DBCSCHAR
                    key = Key.OemEnlw;          // DbeDbcsChar 
                    break;

                case NativeMethods.VK_OEM_BACKTAB: // VK_DBE_ROMAN
                    key = Key.OemBackTab;          // DbeRoman 
                    break;
 
                case NativeMethods.VK_ATTN: // VK_DBE_NOROMAN 
                    key = Key.Attn;         // DbeNoRoman
                    break; 

                case NativeMethods.VK_CRSEL: // VK_DBE_ENTERWORDREGISTERMODE
                    key = Key.CrSel;         // DbeEnterWordRegisterMode
                    break; 

                case NativeMethods.VK_EXSEL: // VK_DBE_ENTERIMECONFIGMODE 
                    key = Key.ExSel;         // DbeEnterImeConfigMode 
                    break;
 
                case NativeMethods.VK_EREOF: // VK_DBE_FLUSHSTRING
                    key = Key.EraseEof;      // DbeFlushString
                    break;
 
                case NativeMethods.VK_PLAY: // VK_DBE_CODEINPUT
                    key = Key.Play;         // DbeCodeInput 
                    break; 

                case NativeMethods.VK_ZOOM: // VK_DBE_NOCODEINPUT 
                    key = Key.Zoom;         // DbeNoCodeInput
                    break;

                case NativeMethods.VK_NONAME: // VK_DBE_DETERMINESTRING 
                    key = Key.NoName;         // DbeDetermineString
                    break; 
 
                case NativeMethods.VK_PA1: // VK_DBE_ENTERDLGCONVERSIONMODE
                    key = Key.Pa1;         // DbeEnterDlgConversionMode 
                    break;

                case NativeMethods.VK_OEM_CLEAR:
                    key = Key.OemClear; 
                    break;
 
                default: 
                    key = Key.None;
                    break; 
            }

            return key;
        } 

        ///  
        ///     Convert our Key enum into a Win32 VirtualKey. 
        /// 
        public static int VirtualKeyFromKey(Key key) 
        {
            int virtualKey = 0;

            switch(key) 
            {
                case Key.Cancel: 
                    virtualKey = NativeMethods.VK_CANCEL; 
                    break;
 
                case Key.Back:
                    virtualKey = NativeMethods.VK_BACK;
                    break;
 
                case Key.Tab:
                    virtualKey = NativeMethods.VK_TAB; 
                    break; 

                case Key.Clear: 
                    virtualKey = NativeMethods.VK_CLEAR;
                    break;

                case Key.Return: 
                    virtualKey = NativeMethods.VK_RETURN;
                    break; 
 
                case Key.Pause:
                    virtualKey = NativeMethods.VK_PAUSE; 
                    break;

                case Key.----:
                    virtualKey = NativeMethods.VK_CAPITAL; 
                    break;
 
                case Key.KanaMode: 
                    virtualKey = NativeMethods.VK_KANA;
                    break; 

                case Key.JunjaMode:
                    virtualKey = NativeMethods.VK_JUNJA;
                    break; 

                case Key.FinalMode: 
                    virtualKey = NativeMethods.VK_FINAL; 
                    break;
 
                case Key.KanjiMode:
                    virtualKey = NativeMethods.VK_KANJI;
                    break;
 
                case Key.Escape:
                    virtualKey = NativeMethods.VK_ESCAPE; 
                    break; 

                case Key.ImeConvert: 
                    virtualKey = NativeMethods.VK_CONVERT;
                    break;

                case Key.ImeNonConvert: 
                    virtualKey = NativeMethods.VK_NONCONVERT;
                    break; 
 
                case Key.ImeAccept:
                    virtualKey = NativeMethods.VK_ACCEPT; 
                    break;

                case Key.ImeModeChange:
                    virtualKey = NativeMethods.VK_MODECHANGE; 
                    break;
 
                case Key.Space: 
                    virtualKey = NativeMethods.VK_SPACE;
                    break; 

                case Key.Prior:
                    virtualKey = NativeMethods.VK_PRIOR;
                    break; 

                case Key.Next: 
                    virtualKey = NativeMethods.VK_NEXT; 
                    break;
 
                case Key.End:
                    virtualKey = NativeMethods.VK_END;
                    break;
 
                case Key.Home:
                    virtualKey = NativeMethods.VK_HOME; 
                    break; 

                case Key.Left: 
                    virtualKey = NativeMethods.VK_LEFT;
                    break;

                case Key.Up: 
                    virtualKey = NativeMethods.VK_UP;
                    break; 
 
                case Key.Right:
                    virtualKey = NativeMethods.VK_RIGHT; 
                    break;

                case Key.Down:
                    virtualKey = NativeMethods.VK_DOWN; 
                    break;
 
                case Key.Select: 
                    virtualKey = NativeMethods.VK_SELECT;
                    break; 

                case Key.Print:
                    virtualKey = NativeMethods.VK_PRINT;
                    break; 

                case Key.Execute: 
                    virtualKey = NativeMethods.VK_EXECUTE; 
                    break;
 
                case Key.Snapshot:
                    virtualKey = NativeMethods.VK_SNAPSHOT;
                    break;
 
                case Key.Insert:
                    virtualKey = NativeMethods.VK_INSERT; 
                    break; 

                case Key.Delete: 
                    virtualKey = NativeMethods.VK_DELETE;
                    break;

                case Key.Help: 
                    virtualKey = NativeMethods.VK_HELP;
                    break; 
 
                case Key.D0:
                    virtualKey = NativeMethods.VK_0; 
                    break;

                case Key.D1:
                    virtualKey = NativeMethods.VK_1; 
                    break;
 
                case Key.D2: 
                    virtualKey = NativeMethods.VK_2;
                    break; 

                case Key.D3:
                    virtualKey = NativeMethods.VK_3;
                    break; 

                case Key.D4: 
                    virtualKey = NativeMethods.VK_4; 
                    break;
 
                case Key.D5:
                    virtualKey = NativeMethods.VK_5;
                    break;
 
                case Key.D6:
                    virtualKey = NativeMethods.VK_6; 
                    break; 

                case Key.D7: 
                    virtualKey = NativeMethods.VK_7;
                    break;

                case Key.D8: 
                    virtualKey = NativeMethods.VK_8;
                    break; 
 
                case Key.D9:
                    virtualKey = NativeMethods.VK_9; 
                    break;

                case Key.A:
                    virtualKey = NativeMethods.VK_A; 
                    break;
 
                case Key.B: 
                    virtualKey = NativeMethods.VK_B;
                    break; 

                case Key.C:
                    virtualKey = NativeMethods.VK_C;
                    break; 

                case Key.D: 
                    virtualKey = NativeMethods.VK_D; 
                    break;
 
                case Key.E:
                    virtualKey = NativeMethods.VK_E;
                    break;
 
                case Key.F:
                    virtualKey = NativeMethods.VK_F; 
                    break; 

                case Key.G: 
                    virtualKey = NativeMethods.VK_G;
                    break;

                case Key.H: 
                    virtualKey = NativeMethods.VK_H;
                    break; 
 
                case Key.I:
                    virtualKey = NativeMethods.VK_I; 
                    break;

                case Key.J:
                    virtualKey = NativeMethods.VK_J; 
                    break;
 
                case Key.K: 
                    virtualKey = NativeMethods.VK_K;
                    break; 

                case Key.L:
                    virtualKey = NativeMethods.VK_L;
                    break; 

                case Key.M: 
                    virtualKey = NativeMethods.VK_M; 
                    break;
 
                case Key.N:
                    virtualKey = NativeMethods.VK_N;
                    break;
 
                case Key.O:
                    virtualKey = NativeMethods.VK_O; 
                    break; 

                case Key.P: 
                    virtualKey = NativeMethods.VK_P;
                    break;

                case Key.Q: 
                    virtualKey = NativeMethods.VK_Q;
                    break; 
 
                case Key.R:
                    virtualKey = NativeMethods.VK_R; 
                    break;

                case Key.S:
                    virtualKey = NativeMethods.VK_S; 
                    break;
 
                case Key.T: 
                    virtualKey = NativeMethods.VK_T;
                    break; 

                case Key.U:
                    virtualKey = NativeMethods.VK_U;
                    break; 

                case Key.V: 
                    virtualKey = NativeMethods.VK_V; 
                    break;
 
                case Key.W:
                    virtualKey = NativeMethods.VK_W;
                    break;
 
                case Key.X:
                    virtualKey = NativeMethods.VK_X; 
                    break; 

                case Key.Y: 
                    virtualKey = NativeMethods.VK_Y;
                    break;

                case Key.Z: 
                    virtualKey = NativeMethods.VK_Z;
                    break; 
 
                case Key.LWin:
                    virtualKey = NativeMethods.VK_LWIN; 
                    break;

                case Key.RWin:
                    virtualKey = NativeMethods.VK_RWIN; 
                    break;
 
                case Key.Apps: 
                    virtualKey = NativeMethods.VK_APPS;
                    break; 

                case Key.Sleep:
                    virtualKey = NativeMethods.VK_SLEEP;
                    break; 

                case Key.NumPad0: 
                    virtualKey = NativeMethods.VK_NUMPAD0; 
                    break;
 
                case Key.NumPad1:
                    virtualKey = NativeMethods.VK_NUMPAD1;
                    break;
 
                case Key.NumPad2:
                    virtualKey = NativeMethods.VK_NUMPAD2; 
                    break; 

                case Key.NumPad3: 
                    virtualKey = NativeMethods.VK_NUMPAD3;
                    break;

                case Key.NumPad4: 
                    virtualKey = NativeMethods.VK_NUMPAD4;
                    break; 
 
                case Key.NumPad5:
                    virtualKey = NativeMethods.VK_NUMPAD5; 
                    break;

                case Key.NumPad6:
                    virtualKey = NativeMethods.VK_NUMPAD6; 
                    break;
 
                case Key.NumPad7: 
                    virtualKey = NativeMethods.VK_NUMPAD7;
                    break; 

                case Key.NumPad8:
                    virtualKey = NativeMethods.VK_NUMPAD8;
                    break; 

                case Key.NumPad9: 
                    virtualKey = NativeMethods.VK_NUMPAD9; 
                    break;
 
                case Key.Multiply:
                    virtualKey = NativeMethods.VK_MULTIPLY;
                    break;
 
                case Key.Add:
                    virtualKey = NativeMethods.VK_ADD; 
                    break; 

                case Key.Separator: 
                    virtualKey = NativeMethods.VK_SEPARATOR;
                    break;

                case Key.Subtract: 
                    virtualKey = NativeMethods.VK_SUBTRACT;
                    break; 
 
                case Key.Decimal:
                    virtualKey = NativeMethods.VK_DECIMAL; 
                    break;

                case Key.Divide:
                    virtualKey = NativeMethods.VK_DIVIDE; 
                    break;
 
                case Key.F1: 
                    virtualKey = NativeMethods.VK_F1;
                    break; 

                case Key.F2:
                    virtualKey = NativeMethods.VK_F2;
                    break; 

                case Key.F3: 
                    virtualKey = NativeMethods.VK_F3; 
                    break;
 
                case Key.F4:
                    virtualKey = NativeMethods.VK_F4;
                    break;
 
                case Key.F5:
                    virtualKey = NativeMethods.VK_F5; 
                    break; 

                case Key.F6: 
                    virtualKey = NativeMethods.VK_F6;
                    break;

                case Key.F7: 
                    virtualKey = NativeMethods.VK_F7;
                    break; 
 
                case Key.F8:
                    virtualKey = NativeMethods.VK_F8; 
                    break;

                case Key.F9:
                    virtualKey = NativeMethods.VK_F9; 
                    break;
 
                case Key.F10: 
                    virtualKey = NativeMethods.VK_F10;
                    break; 

                case Key.F11:
                    virtualKey = NativeMethods.VK_F11;
                    break; 

                case Key.F12: 
                    virtualKey = NativeMethods.VK_F12; 
                    break;
 
                case Key.F13:
                    virtualKey = NativeMethods.VK_F13;
                    break;
 
                case Key.F14:
                    virtualKey = NativeMethods.VK_F14; 
                    break; 

                case Key.F15: 
                    virtualKey = NativeMethods.VK_F15;
                    break;

                case Key.F16: 
                    virtualKey = NativeMethods.VK_F16;
                    break; 
 
                case Key.F17:
                    virtualKey = NativeMethods.VK_F17; 
                    break;

                case Key.F18:
                    virtualKey = NativeMethods.VK_F18; 
                    break;
 
                case Key.F19: 
                    virtualKey = NativeMethods.VK_F19;
                    break; 

                case Key.F20:
                    virtualKey = NativeMethods.VK_F20;
                    break; 

                case Key.F21: 
                    virtualKey = NativeMethods.VK_F21; 
                    break;
 
                case Key.F22:
                    virtualKey = NativeMethods.VK_F22;
                    break;
 
                case Key.F23:
                    virtualKey = NativeMethods.VK_F23; 
                    break; 

                case Key.F24: 
                    virtualKey = NativeMethods.VK_F24;
                    break;

                case Key.NumLock: 
                    virtualKey = NativeMethods.VK_NUMLOCK;
                    break; 
 
                case Key.Scroll:
                    virtualKey = NativeMethods.VK_SCROLL; 
                    break;

                case Key.LeftShift:
                    virtualKey = NativeMethods.VK_LSHIFT; 
                    break;
 
                case Key.RightShift: 
                    virtualKey = NativeMethods.VK_RSHIFT;
                    break; 

                case Key.LeftCtrl:
                    virtualKey = NativeMethods.VK_LCONTROL;
                    break; 

                case Key.RightCtrl: 
                    virtualKey = NativeMethods.VK_RCONTROL; 
                    break;
 
                case Key.LeftAlt:
                    virtualKey = NativeMethods.VK_LMENU;
                    break;
 
                case Key.RightAlt:
                    virtualKey = NativeMethods.VK_RMENU; 
                    break; 

                case Key.BrowserBack: 
                    virtualKey = NativeMethods.VK_BROWSER_BACK;
                    break;

                case Key.BrowserForward: 
                    virtualKey = NativeMethods.VK_BROWSER_FORWARD;
                    break; 
 
                case Key.BrowserRefresh:
                    virtualKey = NativeMethods.VK_BROWSER_REFRESH; 
                    break;

                case Key.BrowserStop:
                    virtualKey = NativeMethods.VK_BROWSER_STOP; 
                    break;
 
                case Key.BrowserSearch: 
                    virtualKey = NativeMethods.VK_BROWSER_SEARCH;
                    break; 

                case Key.BrowserFavorites:
                    virtualKey = NativeMethods.VK_BROWSER_FAVORITES;
                    break; 

                case Key.BrowserHome: 
                    virtualKey = NativeMethods.VK_BROWSER_HOME; 
                    break;
 
                case Key.VolumeMute:
                    virtualKey = NativeMethods.VK_VOLUME_MUTE;
                    break;
 
                case Key.VolumeDown:
                    virtualKey = NativeMethods.VK_VOLUME_DOWN; 
                    break; 

                case Key.VolumeUp: 
                    virtualKey = NativeMethods.VK_VOLUME_UP;
                    break;

                case Key.MediaNextTrack: 
                    virtualKey = NativeMethods.VK_MEDIA_NEXT_TRACK;
                    break; 
 
                case Key.MediaPreviousTrack:
                    virtualKey = NativeMethods.VK_MEDIA_PREV_TRACK; 
                    break;

                case Key.MediaStop:
                    virtualKey = NativeMethods.VK_MEDIA_STOP; 
                    break;
 
                case Key.MediaPlayPause: 
                    virtualKey = NativeMethods.VK_MEDIA_PLAY_PAUSE;
                    break; 

                case Key.LaunchMail:
                    virtualKey = NativeMethods.VK_LAUNCH_MAIL;
                    break; 

                case Key.SelectMedia: 
                    virtualKey = NativeMethods.VK_LAUNCH_MEDIA_SELECT; 
                    break;
 
                case Key.LaunchApplication1:
                    virtualKey = NativeMethods.VK_LAUNCH_APP1;
                    break;
 
                case Key.LaunchApplication2:
                    virtualKey = NativeMethods.VK_LAUNCH_APP2; 
                    break; 

                case Key.OemSemicolon: 
                    virtualKey = NativeMethods.VK_OEM_1;
                    break;

                case Key.OemPlus: 
                    virtualKey = NativeMethods.VK_OEM_PLUS;
                    break; 
 
                case Key.OemComma:
                    virtualKey = NativeMethods.VK_OEM_COMMA; 
                    break;

                case Key.OemMinus:
                    virtualKey = NativeMethods.VK_OEM_MINUS; 
                    break;
 
                case Key.OemPeriod: 
                    virtualKey = NativeMethods.VK_OEM_PERIOD;
                    break; 

                case Key.OemQuestion:
                    virtualKey = NativeMethods.VK_OEM_2;
                    break; 

                case Key.OemTilde: 
                    virtualKey = NativeMethods.VK_OEM_3; 
                    break;
 
                case Key.AbntC1:
                    virtualKey = NativeMethods.VK_C1;
                    break;
 
                case Key.AbntC2:
                    virtualKey = NativeMethods.VK_C2; 
                    break; 

                case Key.OemOpenBrackets: 
                    virtualKey = NativeMethods.VK_OEM_4;
                    break;

                case Key.OemPipe: 
                    virtualKey = NativeMethods.VK_OEM_5;
                    break; 
 
                case Key.OemCloseBrackets:
                    virtualKey = NativeMethods.VK_OEM_6; 
                    break;

                case Key.OemQuotes:
                    virtualKey = NativeMethods.VK_OEM_7; 
                    break;
 
                case Key.Oem8: 
                    virtualKey = NativeMethods.VK_OEM_8;
                    break; 

                case Key.OemBackslash:
                    virtualKey = NativeMethods.VK_OEM_102;
                    break; 

                case Key.ImeProcessed: 
                    virtualKey = NativeMethods.VK_PROCESSKEY; 
                    break;
 
                case Key.OemAttn:                           // DbeAlphanumeric
                    virtualKey = NativeMethods.VK_OEM_ATTN; // VK_DBE_ALPHANUMERIC
                    break;
 
                case Key.OemFinish:                           // DbeKatakana
                    virtualKey = NativeMethods.VK_OEM_FINISH; // VK_DBE_KATAKANA 
                    break; 

                case Key.OemCopy:                           // DbeHiragana 
                    virtualKey = NativeMethods.VK_OEM_COPY; // VK_DBE_HIRAGANA
                    break;

                case Key.OemAuto:                           // DbeSbcsChar 
                    virtualKey = NativeMethods.VK_OEM_AUTO; // VK_DBE_SBCSCHAR
                    break; 
 
                case Key.OemEnlw:                           // DbeDbcsChar
                    virtualKey = NativeMethods.VK_OEM_ENLW; // VK_DBE_DBCSCHAR 
                    break;

                case Key.OemBackTab:                           // DbeRoman
                    virtualKey = NativeMethods.VK_OEM_BACKTAB; // VK_DBE_ROMAN 
                    break;
 
                case Key.Attn:                          // DbeNoRoman 
                    virtualKey = NativeMethods.VK_ATTN; // VK_DBE_NOROMAN
                    break; 

                case Key.CrSel:                          // DbeEnterWordRegisterMode
                    virtualKey = NativeMethods.VK_CRSEL; // VK_DBE_ENTERWORDREGISTERMODE
                    break; 

                case Key.ExSel:                          // EnterImeConfigureMode 
                    virtualKey = NativeMethods.VK_EXSEL; // VK_DBE_ENTERIMECONFIGMODE 
                    break;
 
                case Key.EraseEof:                       // DbeFlushString
                    virtualKey = NativeMethods.VK_EREOF; // VK_DBE_FLUSHSTRING
                    break;
 
                case Key.Play:                           // DbeCodeInput
                    virtualKey = NativeMethods.VK_PLAY;  // VK_DBE_CODEINPUT 
                    break; 

                case Key.Zoom:                           // DbeNoCodeInput 
                    virtualKey = NativeMethods.VK_ZOOM;  // VK_DBE_NOCODEINPUT
                    break;

                case Key.NoName:                          // DbeDetermineString 
                    virtualKey = NativeMethods.VK_NONAME; // VK_DBE_DETERMINESTRING
                    break; 
 
                case Key.Pa1:                          // DbeEnterDlgConversionMode
                    virtualKey = NativeMethods.VK_PA1; // VK_ENTERDLGCONVERSIONMODE 
                    break;

                case Key.OemClear:
                    virtualKey = NativeMethods.VK_OEM_CLEAR; 
                    break;
 
                default: 
                    virtualKey = 0;
                    break; 
            }

            return virtualKey;
        } 
    }
} 
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK