C# / C++: Tastendruck: case 'A' und 'B' mehrerer Tasten gleichzeitig

...komplette Frage anzeigen

1 Antwort

Die erste Frage wäre mal, wie du an den Wert für die "switch"-Anweisung kommst.

Wenn du unter Windows (ohne .NET) einen Callback für das Drücken von Tasten verwendest, so müsstest du neben dem Callback für das Drücken der Taste auch noch den Callback für das Loslassen der Taste auswerten:

case WM_KEYDOWN:
    ...
    switch(key)
    {
    case 'A':
        a_pressed=TRUE;
        break;
    case 'B':
        b_pressed=TRUE;
        break;
    ...
    }
    if(a_pressed && b_pressed)
        ...
case WM_KEYUP:
    ...
    switch(key)
    {
    case 'A':
        a_pressed=FALSE;
        break;
    case 'B':
        b_pressed=FALSE;
        break;
    ...

Einen direkten Weg um herauszufinden, ob zwei Tasten gleichzeitig gedrückt sind, gibt es nicht.

Übrigens: Bereits durch die Bauart der PC-Tastaturen bedingt können zwei Tasten nie wirklich gleichzeitig gedrückt oder losgelassen werden, sondern dies passiert immer mit einem kurzen zeitlichen Abstand.

Alternativ könntest du mit der Methode "Keyboard.GetKeyStates" (bzw. "Keyboard::GetKeyStates" in C++.NET bzw. "GetKeyState" in Windows ohne .NET) überprüfen, ob eine Taste bereits gedrückt ist. Hier als Beispiel die Variante in C (C++) ohne Verwendung von .NET:

case 'A':
    if(GetKeyState('B')&0x8000)
    {
        // beide Tasten gedrückt
    }
    break;
case 'B':
    if(GetKeyState('A')&0x8000)
    {
        // beide Tasten gedrückt
    }
    break;

Was möchtest Du wissen?