GetAsyncKeyState_() gibt ein WORD zurück, also nur 16 Bits. In diesem WORD werden nur 2 Bits benutzt - das Kleinste und das Größte.
Das kleinste Bit gibt dabei an, ob die Taste seit dem letzten Aufruf von GetAsyncKeyState_() gedrückt wurde. In einem Multitaskingsystem
kann man dieses Bit aber nicht zuverlässig auswerten, da inzwischen ein anderer Task GetAsyncKeyState_() aufgerufen haben könnte.
Microsoft weist in der Hilfe zu GetAsyncKeyState_() extra darauf hin, dass das ein Überbleibsel von 16-bit Windows ist, und wegen
der Kompatibilität noch da ist, man sich aber nicht auf diesen Wert verlassen kann.
Bit 16 gibt an, ob die Taste momentan gedrückt ist, und nur dieses Bit kann man zuverlässig auswerten. Die anderen Bits sind
nicht definiert, und können 0 oder 1 sein.
Der korrekte Aufruf muss also ein Test auf Bit 16 sein:
Code: Alles auswählen
Debug GetAsyncKeyState_(#VK_CONTROL) & (1<<15)
Debug GetAsyncKeyState_(#VK_CONTROL) & 32768
Debug Bool(GetAsyncKeyState_(#VK_CONTROL) & 32768)