GetAsyncKeyState hat zwei Werte (Bits) in seinem Result,
der "doppelte" Aufruf sollte sich hier (2) eigentlich garnicht auswirken, im Gegensatz zu (1), aber da wäre dein Vorgehen eher tödlich.
Test: Drücke die Tasten so lange, bis du diesen Dialog siehts.
[EDIT] Lies die Dokumentation und bedenke deine falsche Auswertung (4) ->
GetAsyncKeyState.
Delphi-Quellcode:
1: Ord(GetAsyncKeyState(...)) <> 0 // LSB: Taste wurde zwischen jetzt und dem letzten Aufruf von GetAsyncKeyState gedrückt.
2: GetAsyncKeyState(...) < 0 // MSB: Taste ist "jetzt" gedrückt, während des Aufrufs !!!
3: GetKeyState(...) // Taste wurde gedrückt, als Windows mit der aktuellen Aktion anfing (als die aktuell verarbeitete Message "gesendet" wurde)
4: GetAsyncKeyState(...) = 0 oder GetAsyncKeyState(...) <> 0 // MSB *und* LSB auswerten, das kann nur schief gehen, darum hilft hier der "tödlich" doppelte Aufruf
Ich empfehle dir auch den Unterschied zwischen GetAsyncKeyState und GetKeyState zu lernen und dann Letzeres zu verwenden.
http://blog.m-ri.de/index.php/2008/0...-zu-verwenden/