Mehrere Tasten in WinProc



  • Habe ein kleines Verständnisproblem ^^

    Angenommen, ich habe 2 Tasten auf meiner Tastatur gedrückt, werden doch erst WM_KEYDOWN für die erste Taste, dann WM_CHAR für die erste Taste und dann das gleiche für die zweite Taste gesendet!? Es ist also nicht möglich die beiden Tasten gleichzeitig abzufragen (sie werden nacheinander empfangen und verarbeitet) und in einer bedingung zu verknüpfen (also z.b. wenn w und e gedrückt sind mache das.. zumindest nicht ohne zwischenspeicherung.. oder liege ich da falsch?



  • Du bekommst immer nur eine Taste, keine Liste von Tasten.
    Du brauchst aber keine Liste von gedrückten Tasten zu speichern, das macht Windows schon.
    Du kannst aber sowas in der Richtung machen:

    case WM_CHAR:
        if (wParam == _T('e'))
            if (GetKeyState(_T('w'))
                w_and_e_pressed();
            else
                only_e_pressed();
    

    Vielleicht weniger if/else und mehr switch.



  • Du brauchst aber keine Liste von gedrückten Tasten zu speichern, das macht Windows schon.

    wie? alle tastatur-tasten inklusive maus? Wie kann ich denn darauf zugreifen?
    wollte mir gerade sowas in die richtung programmieren.. 🙂



  • nebenbei, diese scancodes von den tasten.. hat jemand davon eine liste und/oder weiß wie viele es gibt und wie die nummeriert sind?



  • Mit GetKeyState kannst du den Status (gedrückt/nicht gedrückt) von allen normalen Tasten bekommen, mit GetAsyncKeyState für Sondertasten.
    Die Liste der Tasten bekommst du bei der Doku für die Funktion (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx)

    Für die Maus ist die Mauszeigerpostion, die gedrückten Maustasten sowie das Scrollrad interessant. Es gibt GetCursorPos für die Cursorposition, die Maustasten zählen als virtuelle Keys und können mit GetAsyncKeyState abgefragt werden (wo es auch eine Liste mit allen Tasten gibt), und das Scrollrad kriegt man per WM_MOUSEWHEEL. Bei letzterem muss man sich die Position merken, wenn man per Mausrad die Fensterposition verändern will.



  • danke 👍


  • Mod

    nwp3 schrieb:

    Mit GetKeyState kannst du den Status (gedrückt/nicht gedrückt) von allen normalen Tasten bekommen, mit GetAsyncKeyState für Sondertasten.

    Diese Unterscheidung ist Quatsch. Die Funktionen sind identisch. Alleine der Zeitpunkt zu dem der Tastenstatus ermittelt wird unterscheidet sich hier.


Anmelden zum Antworten