En lugar de usar el Timer y el API
GetAsyncKeyState function, sera mejor que instales un Hook al teclado.
Aun asi la MSDN dice claramente:
Return value
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. 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. However, you should not rely on this last behavior; for more information, see the Remarks.
The return value is zero for the following cases:
The current desktop is not the active desktop
The foreground thread belongs to another process and the desktop does not allow the hook or the journal record.
Para saber esto solo aplica mascaras de bits.
Dulces Lunas!¡.