no il problema non è GetAsyncKeyState, l'ho sempre usata così
Bit più significativo: il tasto è stato premuto tra una chiamata e l'altra alla funzione
http://msdn.microsoft.com/en-us/libr...93(VS.85).aspx

Io leggo che:

If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.

E comunque:

Although the least significant bit of the return value indicates whether the key has been pressed since the last query, due to the pre-emptive multitasking nature of Windows, another application can call GetAsyncKeyState and receive the "recently pressed" bit instead of your application.