InputKey

Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Писалось давно для одного из проектов.
Суть: перечень всех стандартных клавиш клавиатуры и мыши + способы визуального отображения нажатых пользователем клавишь

Код:
enum class vKey : UINT
{
   KEY_MOUSE_BUTTON_LEFT  = 1,
   KEY_MOUSE_BUTTON_RIGHT,
   KEY_CANCEL,
   KEY_MOUSE_BUTTON_MIDDLE,

   KEY_0 = 48,
   KEY_1,
   KEY_2,
   KEY_3,
   KEY_4,
   KEY_5,
   KEY_6,
   KEY_7,
   KEY_8,
   KEY_9,

   KEY_A = 65,
   KEY_B,
   KEY_C,
   KEY_D,
   KEY_E,
   KEY_F,
   KEY_G,
   KEY_H,
   KEY_I,
   KEY_J,
   KEY_K,
   KEY_L,
   KEY_M,
   KEY_N,
   KEY_O,
   KEY_P,
   KEY_Q,
   KEY_R,
   KEY_S,
   KEY_T,
   KEY_U,
   KEY_V,
   KEY_W,
   KEY_X,
   KEY_Y,
   KEY_Z,

   KEY_NUMPAD_0 = 320,
   KEY_NUMPAD_1,
   KEY_NUMPAD_2,
   KEY_NUMPAD_3,
   KEY_NUMPAD_4,
   KEY_NUMPAD_5,
   KEY_NUMPAD_6,
   KEY_NUMPAD_7,
   KEY_NUMPAD_8,
   KEY_NUMPAD_9,

   KEY_F1 = 290,
   KEY_F2,
   KEY_F3,
   KEY_F4,
   KEY_F5,
   KEY_F6,
   KEY_F7,
   KEY_F8,
   KEY_F9,
   KEY_F10,
   KEY_F11,
   KEY_F12,

   KEY_SHIFT_LEFT = 340,
   KEY_CTRL_LEFT,
   KEY_ALT_LEFT,
   KEY_SHIFT_RIGHT = 344,
   KEY_CTRL_RIGHT,
   KEY_ALT_RIGHT,
   KEY_SPACE = 32,

   KEY_ESC = 256,
   KEY_ENTER,
   KEY_TAB,
   KEY_BACKSPACE,

  KEY_INSERT  = 260,
  KEY_DELETE,
   KEY_ARROW_RIGHT,
   KEY_ARROW_LEFT,
   KEY_ARROW_DOWN,
   KEY_ARROW_UP,
   KEY_PAGE_UP,
   KEY_PAGE_DOWN,
   KEY_HOME,
   KEY_END,

   KEY_CAPS_LOCK = 280,
   KEY_SCROLL_LOCK,
   KEY_NUM_LOCK,
   KEY_PRINT_SCREEN,
   KEY_PAUSE,
};
Вроде симпатичней смотрится)))

Код:
   if (GetAsyncKeyState((UINT)vKey::KEY_END))
       break;


Имя клавиш(писал для InputManager'a), две вариации:
1) std::vector(Инкапсулирующий массив):
Код:
struct VIRTUALKEY
{
   vKey  uiKey;
   PCHAR  szKey;
};

std::vector<VIRTUALKEY> vtable = 
{
   { vKey::KEY_MOUSE_BUTTON_LEFT,  "LeftClick" },
   { vKey::KEY_MOUSE_BUTTON_RIGHT,  "RighClick" },
   { vKey::KEY_MOUSE_BUTTON_MIDDLE, "MiddleMouse" },
   { vKey::KEY_0, "0" },
   { vKey::KEY_1, "1" },
   { vKey::KEY_2, "2" },
   { vKey::KEY_3, "3" },
   { vKey::KEY_4, "4" },
   { vKey::KEY_5, "5" },
   { vKey::KEY_6, "6" },
   { vKey::KEY_7, "7" },
   { vKey::KEY_8, "8" },
   { vKey::KEY_9, "9" },
   { vKey::KEY_A, "A" },
   { vKey::KEY_B, "B" },
   { vKey::KEY_C, "C" },
   { vKey::KEY_D, "D" },
   { vKey::KEY_E, "E" },
   { vKey::KEY_F, "F" },
   { vKey::KEY_G, "G" },
   { vKey::KEY_H, "H" },
   { vKey::KEY_I, "I" },
   { vKey::KEY_J, "J" },
   { vKey::KEY_K, "K" },
   { vKey::KEY_L, "L" },
   { vKey::KEY_M, "M" },
   { vKey::KEY_N, "N" },
   { vKey::KEY_O, "O" },
   { vKey::KEY_P, "P" },
   { vKey::KEY_Q, "Q" },
   { vKey::KEY_R, "R" },
   { vKey::KEY_S, "S" },
   { vKey::KEY_T, "T" },
   { vKey::KEY_U, "U" },
   { vKey::KEY_V, "V" },
   { vKey::KEY_W, "W" },
   { vKey::KEY_X, "X" },
   { vKey::KEY_Y, "Y" },
   { vKey::KEY_Z, "Z" },
   { vKey::KEY_NUMPAD_0, "NUM 0" },
   { vKey::KEY_NUMPAD_1, "NUM 1" },
   { vKey::KEY_NUMPAD_2, "NUM 2" },
   { vKey::KEY_NUMPAD_3, "NUM 3" },
   { vKey::KEY_NUMPAD_4, "NUM 4" },
   { vKey::KEY_NUMPAD_5, "NUM 5" },
   { vKey::KEY_NUMPAD_6, "NUM 6" },
   { vKey::KEY_NUMPAD_7, "NUM 7" },
   { vKey::KEY_NUMPAD_8, "NUM 8" },
   { vKey::KEY_NUMPAD_9, "NUM 9" },
   { vKey::KEY_F1, "F1" },
   { vKey::KEY_F2, "F2" },
   { vKey::KEY_F3, "F3" },
   { vKey::KEY_F4, "F4" },
   { vKey::KEY_F5, "F5" },
   { vKey::KEY_F6, "F6" },
   { vKey::KEY_F7, "F7" },
   { vKey::KEY_F8, "F8" },
   { vKey::KEY_F9, "F9" },
   { vKey::KEY_F10, "F10" },
   { vKey::KEY_F11, "F11" },
   { vKey::KEY_F12, "F12" },
   { vKey::KEY_SHIFT_LEFT, "SHIFT L" },
   { vKey::KEY_CTRL_LEFT, "CTRL L" },
   { vKey::KEY_ALT_LEFT, "ALT L" },
   { vKey::KEY_SHIFT_RIGHT, "SHIFT R" },
   { vKey::KEY_CTRL_RIGHT, "CTRL R" },
   { vKey::KEY_ALT_RIGHT, "ALT R" },
   { vKey::KEY_SPACE, "Space" },
   { vKey::KEY_ESC, "Esc" },
   { vKey::KEY_ENTER, "Enter" },
   { vKey::KEY_TAB, "Tab" },
   { vKey::KEY_BACKSPACE, "BackSpace" },
   { vKey::KEY_INSERT, "Iinsert" },
   { vKey::KEY_DELETE, "Delete" },
   { vKey::KEY_ARROW_RIGHT, "Right" },
   { vKey::KEY_ARROW_LEFT, "Left" },
   { vKey::KEY_ARROW_DOWN, "Down" },
   { vKey::KEY_ARROW_UP, "Up" },
   { vKey::KEY_PAGE_UP, "Page Up" },
   { vKey::KEY_PAGE_DOWN, "Page Down" },
   { vKey::KEY_HOME, "Home" },
   { vKey::KEY_END, "End" },
   { vKey::KEY_CAPS_LOCK, "CapsLock" },
   { vKey::KEY_SCROLL_LOCK, "ScrollLock" },
   { vKey::KEY_NUM_LOCK, "NumLock" },
   { vKey::KEY_PRINT_SCREEN, "PrintScreen" },
   { vKey::KEY_PAUSE, "Pause" },
};
Код:
while (true)
   {
     for (size_t i = 0; i < vKeyTable.size(); i++)
     {
       if (GetAsyncKeyState(UINT(vKeyTable[i].uiKey)))
         std::cout << UINT(vKeyTable[i].uiKey) << " : " << vKeyTable[i].szKey << std::endl;//отабразит кид и имя нажатой клавиши
     }
   }
2) std::map(ассоциативный массив);
Код:
std::map <vKey, std::string> mKeyTable =
{
   { vKey::KEY_MOUSE_BUTTON_LEFT,  "LeftClick" },
   { vKey::KEY_MOUSE_BUTTON_RIGHT,  "RighClick" },
   { vKey::KEY_MOUSE_BUTTON_MIDDLE, "MiddleMouse" },
   { vKey::KEY_0, "0" },
   { vKey::KEY_1, "1" },
   { vKey::KEY_2, "2" },
   { vKey::KEY_3, "3" },
   { vKey::KEY_4, "4" },
   { vKey::KEY_5, "5" },
   { vKey::KEY_6, "6" },
   { vKey::KEY_7, "7" },
   { vKey::KEY_8, "8" },
   { vKey::KEY_9, "9" },
   { vKey::KEY_A, "A" },
   { vKey::KEY_B, "B" },
   { vKey::KEY_C, "C" },
   { vKey::KEY_D, "D" },
   { vKey::KEY_E, "E" },
   { vKey::KEY_F, "F" },
   { vKey::KEY_G, "G" },
   { vKey::KEY_H, "H" },
   { vKey::KEY_I, "I" },
   { vKey::KEY_J, "J" },
   { vKey::KEY_K, "K" },
   { vKey::KEY_L, "L" },
   { vKey::KEY_M, "M" },
   { vKey::KEY_N, "N" },
   { vKey::KEY_O, "O" },
   { vKey::KEY_P, "P" },
   { vKey::KEY_Q, "Q" },
   { vKey::KEY_R, "R" },
   { vKey::KEY_S, "S" },
   { vKey::KEY_T, "T" },
   { vKey::KEY_U, "U" },
   { vKey::KEY_V, "V" },
   { vKey::KEY_W, "W" },
   { vKey::KEY_X, "X" },
   { vKey::KEY_Y, "Y" },
   { vKey::KEY_Z, "Z" },
   { vKey::KEY_NUMPAD_0, "NUM 0" },
   { vKey::KEY_NUMPAD_1, "NUM 1" },
   { vKey::KEY_NUMPAD_2, "NUM 2" },
   { vKey::KEY_NUMPAD_3, "NUM 3" },
   { vKey::KEY_NUMPAD_4, "NUM 4" },
   { vKey::KEY_NUMPAD_5, "NUM 5" },
   { vKey::KEY_NUMPAD_6, "NUM 6" },
   { vKey::KEY_NUMPAD_7, "NUM 7" },
   { vKey::KEY_NUMPAD_8, "NUM 8" },
   { vKey::KEY_NUMPAD_9, "NUM 9" },
   { vKey::KEY_F1, "F1" },
   { vKey::KEY_F2, "F2" },
   { vKey::KEY_F3, "F3" },
   { vKey::KEY_F4, "F4" },
   { vKey::KEY_F5, "F5" },
   { vKey::KEY_F6, "F6" },
   { vKey::KEY_F7, "F7" },
   { vKey::KEY_F8, "F8" },
   { vKey::KEY_F9, "F9" },
   { vKey::KEY_F10, "F10" },
   { vKey::KEY_F11, "F11" },
   { vKey::KEY_F12, "F12" },
   { vKey::KEY_SHIFT_LEFT, "SHIFT L" },
   { vKey::KEY_CTRL_LEFT, "CTRL L" },
   { vKey::KEY_ALT_LEFT, "ALT L" },
   { vKey::KEY_SHIFT_RIGHT, "SHIFT R" },
   { vKey::KEY_CTRL_RIGHT, "CTRL R" },
   { vKey::KEY_ALT_RIGHT, "ALT R" },
   { vKey::KEY_SPACE, "Space" },
   { vKey::KEY_ESC, "Esc" },
   { vKey::KEY_ENTER, "Enter" },
   { vKey::KEY_TAB, "Tab" },
   { vKey::KEY_BACKSPACE, "BackSpace" },
   { vKey::KEY_INSERT, "Iinsert" },
   { vKey::KEY_DELETE, "Delete" },
   { vKey::KEY_ARROW_RIGHT, "Right" },
   { vKey::KEY_ARROW_LEFT, "Left" },
   { vKey::KEY_ARROW_DOWN, "Down" },
   { vKey::KEY_ARROW_UP, "Up" },
   { vKey::KEY_PAGE_UP, "Page Up" },
   { vKey::KEY_PAGE_DOWN, "Page Down" },
   { vKey::KEY_HOME, "Home" },
   { vKey::KEY_END, "End" },
   { vKey::KEY_CAPS_LOCK, "CapsLock" },
   { vKey::KEY_SCROLL_LOCK, "ScrollLock" },
   { vKey::KEY_NUM_LOCK, "NumLock" },
   { vKey::KEY_PRINT_SCREEN, "PrintScreen" },
   { vKey::KEY_PAUSE, "Pause" }
};
Код:
while (true)
   {
     for (auto it = mKeyTable.begin(); it != mKeyTable.end(); ++it)
     {
       if (GetAsyncKeyState(UINT(it->first)))
        std::cout << UINT(it->first) << " : " << it->second << std::endl;//отабразит кид и имя нажатой клавиши
     }
}
 
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
396
Реакции[?]
194
Поинты[?]
0
в енаме правильные только буквы, и цифры. Вот чутка измененный енам, вроде все работает
Код:
enum class vKey : UINT
{
    KEY_MOUSE_BUTTON_LEFT = 1,
    KEY_MOUSE_BUTTON_RIGHT,
    KEY_CANCEL,
    KEY_MOUSE_BUTTON_MIDDLE,

    KEY_0 = 48,
    KEY_1,
    KEY_2,
    KEY_3,
    KEY_4,
    KEY_5,
    KEY_6,
    KEY_7,
    KEY_8,
    KEY_9,

    KEY_A = 65,
    KEY_B,
    KEY_C,
    KEY_D,
    KEY_E,
    KEY_F,
    KEY_G,
    KEY_H,
    KEY_I,
    KEY_J,
    KEY_K,
    KEY_L,
    KEY_M,
    KEY_N,
    KEY_O,
    KEY_P,
    KEY_Q,
    KEY_R,
    KEY_S,
    KEY_T,
    KEY_U,
    KEY_V,
    KEY_W,
    KEY_X,
    KEY_Y,
    KEY_Z,

    KEY_NUMPAD_0 = 96,
    KEY_NUMPAD_1,
    KEY_NUMPAD_2,
    KEY_NUMPAD_3,
    KEY_NUMPAD_4,
    KEY_NUMPAD_5,
    KEY_NUMPAD_6,
    KEY_NUMPAD_7,
    KEY_NUMPAD_8,
    KEY_NUMPAD_9,

    KEY_F1 = 112,
    KEY_F2,
    KEY_F3,
    KEY_F4,
    KEY_F5,
    KEY_F6,
    KEY_F7,
    KEY_F8,
    KEY_F9,
    KEY_F10,
    KEY_F11,
    KEY_F12,

    KEY_SHIFT_LEFT = 160,
    KEY_SHIFT_RIGHT,
    KEY_CTRL_LEFT,
    KEY_CTRL_RIGHT,
    KEY_ALT_LEFT,
    KEY_ALT_RIGHT,

    KEY_ESC = 27,
    KEY_ENTER = 257,
    KEY_TAB,
    KEY_BACKSPACE,

    KEY_SPACE = 0x20,
    KEY_PAGE_UP,
    KEY_PAGE_DOWN,
    KEY_END,
    KEY_HOME,
    KEY_ARROW_LEFT,
    KEY_ARROW_UP,
    KEY_ARROW_RIGHT,
    KEY_ARROW_DOWN,

    KEY_PAUSE = 0x13,
    KEY_CAPS_LOCK,

    KEY_NUM_LOCK = 0x90,
    KEY_SCROLL_LOCK,

    KEY_PRINT_SCREEN = 0x2C,
    KEY_INSERT = 20,
    KEY_DELETE = 0x2E
};
 
Сверху Снизу