Tastendruck aus Speicher löschen

FSA

Erfahrenes Mitglied
Hallo. Ich frage manche Tasten mit GetKeyState/GetAsyncKeyState ab. Da ist mir aufgefallen, dass wenn ich eine Taste drücke während etwas geladen wird, also kein Update, die Taste im Speicher hinterlegt sein muss. Denn wenn die erste Aktualisierung kommt sagt er die Taste ist gedrückt. Kann man mit irgendeiner Funktion diesen Tastendruck löschen?
Danke
EDIT: 2.Frage Mir fällt gerade auf, dass GetKeyState auf einmal so lange true liefert bis die Taste nochmal gedrückt worden ist! Vorher war das nicht so.
C++:
if(GetKeyState(VK_F1))
{
	Beep(200,200);
	m_ObjectHandler->AddObject(MT_BOX1);
}
Es "Piept" andauernd bis man nochmal drückt. Was ist daran falsch?
 
Zuletzt bearbeitet von einem Moderator:
Die F-Tasten sind wie zum Beispiel Caps Lock so genannte Toggle-Tasten. Beim ersten Druck werden sie aktiviert und beim zweiten werden sie deaktiviert. Wenn du dir auf der MSDN die Beschreibung des Rückgabewertes von GetKeyState anschaust erkennst du, dass das höchste Bit angibt ob die Taste momentan gedrückt ist oder nicht und das tiefste Bit ob die Taste (falls es eine Toggle-Taste ist) momentan im aktivierten Zustand ist oder nicht.

Ergo musst du folgende Tests durchführen:
C++:
bool isKeyToggled(unsighed short key) {
   return (GetKeyState(key) & 0x01) != 0;
}

bool isKeyPressed(unsighed short key) {
   return (GetKeyState(key) & 0x8000) != 0;
}
 
Danke. Und wie kann ich abfragen ob sie losgelassen wurde? Weil wenn ich jetzt isKeyPressed benutze, dann liefert sie immer true wenn sie gedrückt ist. Ich will aber nur etwas machen wenn die Taste einmal gedrückt und wieder losgelassen wurde. Mein Ziel ist einfach eine Variable umzusetzen. Doch mit der Funktion springt sie immer zwischen true und false hin und her.
 
Zurück