VK_MENU bei WH_KEYBOARD_LL



  • Guten Tag,
    ich probiere mich gerade an den ganzen Hooks und scheitere an dem Auslesen der Alt sowie Alt Gr Taste.

    Auslesen möchte ich folgender Maßen:

    BOOL isAlt();
    
    BOOL isAlt()
    {
         if ((GetKeyState(VK_MENU) & 0x8000)!=0) {
            return 1;
         } else {
            return 0;
         }
    }
    
    if (isAlt() == 1)
     {
                 printf("ALT");
     }
    

    Wenn ich die Alt Tasten alleine drücke passiert garnichts, drücke ich jedoch Alt und Strg dann erscheint das erwünscht ALT in der Konsole.

    Wo habe ich den Denkfehler?

    Jede andere Taste wird abgefragt und mit der Funktion dann ausgegeben, nur eben Alt nicht alleine.


  • Mod

    Das ist vollkommen richtig und by Design.

    Die ALT Taste alleine erzeugt kein Zeichen und keine Event.
    Würdest Du ALT und einige Ziffern auf dem numerischen Tastenblock tippen und dann die ALT Taste loslassen würde nur das entsprechende Zeichen mit dem Code erzeugt.

    ALT drücken + 6 + 5 + ALT loslassen erzeugt ein großes A!



  • Somit könnte ich also die [ ], welche durch Alt Gr ausgelöst wurden nicht als Tastendruck auslesen?


  • Mod

    Pathelion schrieb:

    Somit könnte ich also die [ ], welche durch Alt Gr ausgelöst wurden nicht als Tastendruck auslesen?

    Was meinst Du damit? Du bekomst das Zeichen [] natürlich selbst.





  • Du könntest Folgendes probieren:

    bool IsKeyDown(int key, bool ralt)
    {
    	if((GetKeyState(key) & 0x8000) && (ralt?(GetKeyState(VK_MENU) & 0x8000):1))
    		return true;
    
    	return false;
    }
    ...
    
    if(IsKeyDown(0x38,true)) // Taste 8 und VK_MENU -> [
        ...
    




  • In dem Hook bekommst Du doch den Tastendruck mit! Was machst Du da mit GetKeyState rum? Ich bin mir nicht sicher, ob diese da korrekt funktionieren, da Du Dich ja noch im LL-Hook befindest...



  • Also generell lasse ich mir ja den VK_Code weitergeben

    MyKeyCode = (PKBDLLHOOKSTRUCT) (lParam);
    

    Diesen lasse ich mit MapVirtualKey in MVK_Code übergeben und daraufhin mit GetKeyNameTextA als Variable KeyNameBuffer.

    Schlussendlich lasse ich mit

    printf(KeyNameBuffer)
    

    alles ausgeben.
    Dadurch wird mir jede Taste die ich drücke ja angezeigt, bloß alles, was mit ALT ausgelöst wird und ALT selbst, wollen nicht.


Anmelden zum Antworten