To do that you need to check getasynckeystate very often, and store the state in a buffer. For several keys you just use an array and loop trough.
Code:
'what you do is get the keystate into a temporary variable
temp = GetAsyncKeyState(Key)
'then by xoring it against a state you will know if it has changed
'so by multiplying it with the original state as -1 for 0
'and 1 for 1, you still get unchanged state as 0
keyevent = (keystate Xor temp) * (temp - 0.5) * 2
keystate = temp
The result, keyevent is
-1 the key is pressed
1 the key is released
0 not changed
Use
writing software in C++ is like driving rivets into steel beam with a toothpick.
writing haskell makes your life easier:
reverse (p (6*9)) where p x|x==0=""|True=chr (48+z): p y where (y,z)=divMod x 13
To throw away OOP for low level languages is myopia, to keep OOP is hyperopia. To throw away OOP for a high level language is insight.