// TODO: Convert this function to a lookup from an XML file, then provide multiple files and a way to fine-tune...
        private static uint ConvertVKeyToiMonMceKeyCode(Keyboard.VKey vKey, KeyModifierState ModState)
        {
            switch (vKey)
            {
                case Keyboard.VKey.VK_A:
                    return 0x04;
                case Keyboard.VKey.VK_B:
                    return 0x05;
                case Keyboard.VKey.VK_C:
                    return 0x06;
                case Keyboard.VKey.VK_D:
                    return 0x07;
                case Keyboard.VKey.VK_E:
                    return 0x08;
                case Keyboard.VKey.VK_F:
                    return 0x09;
                case Keyboard.VKey.VK_G:
                    return 0x0A;
                case Keyboard.VKey.VK_H:
                    return 0x0B;
                case Keyboard.VKey.VK_I:
                    return 0x0C;
                case Keyboard.VKey.VK_J:
                    return 0x0D;
                case Keyboard.VKey.VK_K:
                    return 0x0E;
                case Keyboard.VKey.VK_L:
                    return 0x0F;
                case Keyboard.VKey.VK_M:
                    return 0x10;
                case Keyboard.VKey.VK_N:
                    return 0x11;
                case Keyboard.VKey.VK_O:
                    return 0x12;
                case Keyboard.VKey.VK_P:
                    return 0x13;
                case Keyboard.VKey.VK_Q:
                    return 0x14;
                case Keyboard.VKey.VK_R:
                    return 0x15;
                case Keyboard.VKey.VK_S:
                    return 0x16;
                case Keyboard.VKey.VK_T:
                    return 0x17;
                case Keyboard.VKey.VK_U:
                    return 0x18;
                case Keyboard.VKey.VK_V:
                    return 0x19;
                case Keyboard.VKey.VK_W:
                    return 0x1A;
                case Keyboard.VKey.VK_X:
                    return 0x1B;
                case Keyboard.VKey.VK_Y:
                    return 0x1C;
                case Keyboard.VKey.VK_Z:
                    return 0x1D;

                case Keyboard.VKey.VK_1:
                    return 0x01;
                case Keyboard.VKey.VK_2:
                    return 0x02;
                case Keyboard.VKey.VK_3:
                    if (ModState.ShiftOn | ModState.LastKeyupWasShift)
                        return 0x1E;

                    return 0x03;
                case Keyboard.VKey.VK_4:
                    return 0x04;
                case Keyboard.VKey.VK_5:
                    return 0x05;
                case Keyboard.VKey.VK_6:
                    return 0x06;
                case Keyboard.VKey.VK_7:
                    return 0x07;
                case Keyboard.VKey.VK_8:
                    if (ModState.ShiftOn | ModState.LastKeyupWasShift)
                        return 0x1D;

                    return 0x08;
                case Keyboard.VKey.VK_9:
                    return 0x09;
                case Keyboard.VKey.VK_0:
                    return 0x00;

                case Keyboard.VKey.VK_ESCAPE:
                    return 0x29;
                case Keyboard.VKey.VK_RETURN:
                    return 0x28;

                case Keyboard.VKey.VK_BACK:
                    return 0x23;

                case Keyboard.VKey.VK_TAB:
                    return 0x2B;
                case Keyboard.VKey.VK_SPACE:
                    return 0x2C;
                case Keyboard.VKey.VK_OEM_MINUS:
                    return 0x2D;
                case Keyboard.VKey.VK_OEM_PLUS:
                    return 0x2E;
                case Keyboard.VKey.VK_OEM_4:
                    return 0x2F;
                case Keyboard.VKey.VK_OEM_6:
                    return 0x30;
                case Keyboard.VKey.VK_OEM_5:
                    return 0x31;
                //case Keyboard.VKEY.VK_Non-US #: return 0X32;
                case Keyboard.VKey.VK_OEM_1:
                    return 0x33;
                case Keyboard.VKey.VK_OEM_7:
                    return 0x34;
                case Keyboard.VKey.VK_OEM_3:
                    return 0x35;
                case Keyboard.VKey.VK_OEM_COMMA:
                    return 0x36;
                case Keyboard.VKey.VK_OEM_PERIOD:
                    return 0x37;
                case Keyboard.VKey.VK_OEM_2:
                    return 0x38;
                case Keyboard.VKey.VK_CAPITAL:
                    return 0x39;
                case Keyboard.VKey.VK_F1:
                    return 0x3A;
                case Keyboard.VKey.VK_F2:
                    return 0x3B;
                case Keyboard.VKey.VK_F3:
                    return 0x3C;
                case Keyboard.VKey.VK_F4:
                    return 0x3D;
                case Keyboard.VKey.VK_F5:
                    return 0x3E;
                case Keyboard.VKey.VK_F6:
                    return 0x3F;
                case Keyboard.VKey.VK_F7:
                    return 0x40;
                case Keyboard.VKey.VK_F8:
                    return 0x41;
                case Keyboard.VKey.VK_F9:
                    return 0x42;
                case Keyboard.VKey.VK_F10:
                    return 0x43;
                case Keyboard.VKey.VK_F11:
                    return 0x44;
                case Keyboard.VKey.VK_F12:
                    return 0x45;
                case Keyboard.VKey.VK_PRINT:
                    return 0x46;
                case Keyboard.VKey.VK_SCROLL:
                    return 0x47;
                case Keyboard.VKey.VK_PAUSE:
                    return 0x48;
                case Keyboard.VKey.VK_INSERT:
                    return 0x49;
                case Keyboard.VKey.VK_HOME:
                    return 0x4A;
                case Keyboard.VKey.VK_PRIOR:
                    return 0x4B;
                case Keyboard.VKey.VK_DELETE:
                    return 0x4C;
                case Keyboard.VKey.VK_END:
                    return 0x4D;
                case Keyboard.VKey.VK_NEXT:
                    return 0x4E;
                case Keyboard.VKey.VK_RIGHT:
                    return 0x4F;
                case Keyboard.VKey.VK_LEFT:
                    return 0x50;
                case Keyboard.VKey.VK_DOWN:
                    return 0x51;
                case Keyboard.VKey.VK_UP:
                    return 0x52;
                case Keyboard.VKey.VK_OEM_102:
                    return 0x64;
                case Keyboard.VKey.VK_APPS:
                    return 0x65;

                default:
                    throw new ArgumentException(String.Format("Unknown Key Value {0}", vKey), "vKey");
            }
        }
        private static uint ConvertVKeyToiMonKeyCode(Keyboard.VKey vKey, KeyModifierState ModState)
        {
            switch (vKey)
            {
                case Keyboard.VKey.VK_BACK:
                    return 0x20;
                case Keyboard.VKey.VK_SPACE:
                    return 0x94;
                case Keyboard.VKey.VK_1:
                    return 0x3A;
                case Keyboard.VKey.VK_2:
                    return 0xF2;
                case Keyboard.VKey.VK_3:
                    if (ModState.ShiftOn | ModState.LastKeyupWasShift)
                        return 0x60;

                    return 0x32;
                case Keyboard.VKey.VK_4:
                    return 0x8A;
                case Keyboard.VKey.VK_5:
                    return 0x5A;
                case Keyboard.VKey.VK_6:
                    return 0xAA;
                case Keyboard.VKey.VK_7:
                    return 0xD6;
                case Keyboard.VKey.VK_8:
                    if (ModState.ShiftOn | ModState.LastKeyupWasShift)
                        return 0x38;

                    return 0x88;
                case Keyboard.VKey.VK_9:
                    return 0xA0;
                case Keyboard.VKey.VK_0:
                    return 0xEA;
                case Keyboard.VKey.VK_RETURN:
                    return 0x22;
                case Keyboard.VKey.VK_ESCAPE:
                    return 0xFC;

                default:
                    return 0;
                //throw new ArgumentException(String.Format("Unknown Key Value {0}", vKey), "vKey");
            }
        }