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.
-
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. [...]
-
Code-Walker schrieb:
char* Taste = LeseTasteAusDatei(); switch(Taste) { case "VK_TAB": }
Dir ist klar, dass dieser Code nicht funktionieren kann?
-
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