Oh I should note that with this method, I assume you'll be using scancodes to determine when a key is pressed.
As such, things might be a little bit more complicated than I made it out above.
You will need to write some code which only returns a keypress as having happened the first time it changed state from up to down.
In other words, you might create two arrays:
Dim NewKeyState(256)
Dim OldKeyState(256)
In the first array, for each key you are scanning, you stick the result in there. Ie:
NewKeyState(200) = KeyDown(200) ; Up
NewKeyState(201) = KeyDown(201) ; Down
NewKeyState(202) = KeyDown(202) ; Left
Note the numbers are the same in both.
(I made those numbers up, they're not the real scancodes.)
Now you have an array which contains the current state of every key during a particular loop of the game.
Now, to see if a key has been pressed, loop through the two arrays and compare them.
For Loop = 0 to 255
If NewKeyState(Loop) <> OldKeyState(Loop)
If NewKeyState(Loop) = True Then the key went from up to down. Add it to the keyboard buffer I descibed before.
If NeyKeyState(Loop) = False Then the key went from down to up. You might also want to add this to the keyboard buffer, but probably not, so ignore it.
Endif
Next
And finally, after you've done that, you'll want to copy the new array over the old array to update it for the next loop.