#include "keyboard.h" const int KEYS_SIZE = 255; struct { DWORD time; BOOL isWithAlt; BOOL wasDownBefore; BOOL isUpNow; } keyStates[KEYS_SIZE]; void OnKeyboardMessage(DWORD key, WORD repeats, BYTE scanCode, BOOL isExtended, BOOL isWithAlt, BOOL wasDownBefore, BOOL isUpNow) { if (key < KEYS_SIZE) { keyStates[key].time = GetTickCount(); keyStates[key].isWithAlt = isWithAlt; keyStates[key].wasDownBefore = wasDownBefore; keyStates[key].isUpNow = isUpNow; } } const int NOW_PERIOD = 100, MAX_DOWN = 5000; // ms bool IsKeyDown(DWORD key) { return (key < KEYS_SIZE) ? ((GetTickCount() < keyStates[key].time + MAX_DOWN) && !keyStates[key].isUpNow) : false; } bool IsKeyJustUp(DWORD key, bool exclusive) { bool b = (key < KEYS_SIZE) ? (GetTickCount() < keyStates[key].time + NOW_PERIOD && keyStates[key].isUpNow) : false; if (b && exclusive) ResetKeyState(key); return b; } void ResetKeyState(DWORD key) { if (key < KEYS_SIZE) memset(&keyStates[key], 0, sizeof(keyStates[0])); }