tastatureingaben empfangen und auswerten



  • jaa ok, nun hab ich

    GetAsyncKeyState(VK_UP) // oder VK_... wie auch immer
    

    nun möchte ich das aber abfragen..

    if (GetAsyncKeyState(VK_UP))
    {
    // irgendwas machen...
    }
    

    da üassiert aber nicht, da das programm immer vorzeitig beendet wird...



  • mit einer while-schleife, okay hat sich erledigt.

    Nun möchte ich aber Buchstaben wie:
    a,b,c,..
    A,B,C,..
    mit benutzen, wie geht das?

    (GetAsyncKeyState(VK_A))
    

    nimmt er nich

    undeclared identifier



  • Versuch mal GetAsyncKeyState('A')

    in der MSDN gibts es eine liste der Virtual Keys anhand derer du einsehen kannst welche tasten mit VK bezeichnet sind.



  • so, Zur zeit löse ich as so

    if (GetAsyncKeyState(VK_UP))
    {
    // irgendwas machen
    }
    

    dann habe ich mir was durchgelesen und wollte es so lösen mit Hilfe "case":

    case WM_KEYDOWN: 
                switch (wParam) 
                { 
    
                    case VK_UP: 
    
                        // Process the UP ARROW key. 
    
                        break; 
    
                    case VK_DOWN: 
    
                        // Process the DOWN ARROW key. 
    
                        break;
    

    dann leider is dann wede WM_KEYDOWN noch wParam deklariert, was muss ich machen?



  • Du mußt das in das Windows-API-Grundprogramm einbetten: Hier das Minimalst-Fenster-Programm

    #include <windows.h>
    
    long _stdcall W(HWND t, unsigned int u, WPARAM v, LPARAM w)
    {
      if (u == WM_DESTROY)
          PostQuitMessage(0);
      return DefWindowProc(t, u, v, w);
    }
    
    int _stdcall WinMain(HINSTANCE d, HINSTANCE e, char *f, int g)
    {
      WNDCLASS a;
      memset(&a, 0, sizeof(a));
      a.lpfnWndProc   = W;
      a.lpszClassName = "a";
      RegisterClass(&a);
    
      HWND b;
      b = CreateWindow("a", 0, WS_SYSMENU | WS_THICKFRAME, 0, 0, 0, 0, 0, 0, 0, 0);
      ShowWindow(b, SW_SHOWNORMAL);
    
      MSG c;
      while(GetMessage(&c, 0, 0, 0))
          DispatchMessage(&c);
      return 0;
    }
    
    /* WS_SYSMENU: SystemMenu (Verschieben, Schließen) und Button Schließen [X] */
    /* WS_THICKFRAME: Änderung von Breite und Höhe */
    /* Ohne PostQuitMessage oder WS_SYSMENU: Programm mit dem Taskmanager beenden */
    


  • Nenene, ist doch besser mit GetKeyboardState zu lösen...So:

    // ...
    
    case WM_CHAR: {
        BYTE byKeyTab[256];
        GetKeyboardState(byKeyTab);
        if((byKeyTab[VK_CONTROL] & 0x80) && (byKeyTab['A'] & 0x80))
           // [Strg] + [A] gedrückt
    
        // usw.
    } break;
    
    // ...
    


  • @keksekekse: Hä?!, Was soll der Post denn ? Der passt irg.-wie überhaupt nicht 😃 .



  • supersass1 schrieb:

    dann leider is dann wede WM_KEYDOWN noch wParam deklariert, was muss ich machen?

    Das war die Antwort auf sassens Frage.
    Wenns nicht passt, wird es halt passend gmacht...



  • ich habe das jetz so gemacht:

    int i = 0;
    
    while (i==0)
    {
     Sleep(100);
     if (GetAsyncKeyState('A'))
     {
      // was amchen
     }
    
    }
    

    doch nun müsste ich das ja für jeden Buchstaben einzelnd machen, wie kann ich das verallgemeinern?!



  • supersass1 schrieb:

    ich habe das jetz so gemacht:

    int i = 0;
    
    while (i==0)
    {
     Sleep(100);
     if (GetAsyncKeyState('A'))
     {
      // was amchen
     }
    
    }
    

    doch nun müsste ich das ja für jeden Buchstaben einzelnd machen, wie kann ich das verallgemeinern?!

    Ich habs dir doch 'verallgemeinert' ⚠ .


Anmelden zum Antworten