Problem mit Simulieren des Tastendrucks



  • Hallo,
    ich schreib gerade ein Programm, das Tastendrücke simuliert, soweit kein Problem.
    Die zu simulierenden Zeichen werden über eine Datei eingelesen, aber wie kann ich diese jetzt ins VK_XX Format konvertieren, damit ich sie ausgeben kann? (z.b. Tabulator Taste wird zu VK_TAB)
    Gibts da eine Funktion?



  • die meisten (eigendlich alle wichtigen) Tasten haben einen VK_code entsprechend ihrem Ascii wert.


  • Mod

    Nein es gibt keine Funktion die einen smybolischen text in einen VK_ Wert umwandelt. Das gibt es nur umgekehrt mit GetKeyNameText.
    Zudem wäre diese Funktion abhängig von den Spracheinstellungen.



  • Die einfachste variante währe mit einer switch Anweisung. Du liest die uchstaben ein, z.b VK_TAB, und dann wird einfach die VK_TAB Taste imuliert.

    char* Taste = LeseTasteAusDatei();
    
    switch(Taste)
    {
    case "VK_TAB":
    {
        Simuliere(VK_TAB);
        break;
    }
    case "VK_UP":
    {
        Simuliere(VK_UP);
        break;
    }
    }
    

    Ist zwar nicht sehr Professionell, aber eine andere möglichkeit sehe ich nicht!



  • Naja eine schönere hätte ich da schon:
    man könnte in der Initialisierungsphase für alle möglichen Werte die Funktion GetKeyNameText durchlaufen und die Ergebnisse in eine std::map<string, int> stecken.

    [...]
    int GetKeyNameText(
    
        LONG lParam,	// second parameter of keyboard message
        LPTSTR lpString,	// address of buffer for key name
        int nSize 	// maximum length of key-name string length
       );	
    
    Parameters
    
    lParam
    
    Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following portions of lParam
    : 
    
    Bits	Meaning
    16-23	Scan code.
    24	Extended-key flag. Distinguishes some keys on an enhanced keyboard.
    25	"Don't care" bit. The application calling this function sets this bit to indicate that the function should not distinguish between left and right CTRL and SHIFT keys, for example.
    [...]
    

  • Mod

    @Code-Walker:

    Code-Walker schrieb:

    char* Taste = LeseTasteAusDatei();
    
    switch(Taste)
    {
    case "VK_TAB":
    }
    

    Dir ist klar, dass dieser Code nicht funktionieren kann? 🕶


  • Mod

    vlad_tepesch schrieb:

    man könnte in der Initialisierungsphase für alle möglichen Werte die Funktion GetKeyNameText durchlaufen

    Meinst Du wirklich, das das geht.
    MapVirtualKey ist dazu auch notwendig, und hier kannst Du INT_MAX Werte einfüttern...



  • Also, ich hab eh erst heute abend Zeit, das Programm "fertig" zu machen, allerdings kann ich schon sagen, wie ich es machen werde 😉

    Und zwar werden die Zeichen, nachdem die Textdatei ausgewählt wurde, "übersetzt" mittels switch und dann in einer List gespeichert, und dann wird diese Liste eben der Reihe nach ausgegeben 😉


Log in to reply