Pseudo code: currentKeyboardState previousKeyboardState void UpdateInput() store currentstate to previousstate get new state to currentstate Now that we have stored the last state and we know the current state, we can check if key was NOT pressed in last frame and is now pressed. So we know if key was pressed down just now. if(currentKeyboardState.KeyIsPressed( KEY_B ) && !previousKeyboardState.KeyIsPressed( KEY_B )) We can also detect if key is being held down, by checking if it was down last frame and now. if(currentKeyboardState.KeyIsPressed( KEY_B ) && previousKeyboardState.KeyIsPressed( KEY_B )) With these, i think you can create what you need. **TL;DR;** Store previous keyboard state, so you can compare current state to previous state and determine if something fishy is going on.