Textzeile als Tastendrücke simulieren
-
Ich habe sowas wie "Good Luck and Have Fun", dass ich als Tastendrücke simulieren will.
Ich möchte NICHT den Zwischenspeicher nutzen á la Strg+C.
Aber anders bekomme ich Probleme bei bestimmten Zeichen.Ich dachte erst an sowas:
int GetKey(char Key, bool Shift) { if ((int(Key) =< 0x5A && int(Key) >= 0x41) && shift) { return int(Key); } else if ((int(Key) <= 0x5A && int(Key) >= 0x41) && !shift) { return (int(Key) + 32)); } else if ((int(Key) <= 0x39 && int(Key) >= 0x30) && !shift) { return (int(Key)); } else if (Key == '!' && shift) return 33; //... }
Aber es gibt 2 Probleme:
1. Ich muss ja noch klären ob shift gebraucht wird. Also zum Beispiel bei Großbuchstaben.
2. Es kommt extremer Nonesense raus:
(in notepad)5
815 6, 7//4 3+815 6, 7//4 3+
6****7
-9 2/17:21 30.09.201017:21 30.09.2010/-
8
-9 -94 1,5
9
-9 17:21 30.09.2010/ 1,5Reale Tastendrücke sind Fett makiert.
Auffällig: das Datum und das Hilfe Fenster, dass bei 9 auftaucht
oder die Uhrzeit.
Eigentlich soll das etwa so aussehen:zahl 7
MISS BOTTOM LANE
if (String(Key) == "8 (ZEHNERTASTATUR)") { if (CheckBox8->Checked) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } int i = 0; for (i = 0; i < Edit8->Text.Length(); i++) { keybd_event((double)GetKey(Edit8->Text[i+1],false), 0, 0, 0); keybd_event((double)GetKey(Edit8->Text[i+1],false), 0, KEYEVENTF_KEYUP, 0); } if (CheckBox8->Checked) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } }
Ich benutze den Systemweiten Keyhook.
Ich brauche nun Denkanstöße und Vorschläge wie ichs besser machen kann,
und / oder korrigiert mein code, denn was ich rausbekomme ist mehr als nur strange.
-
ich weiß nicht ob ich dich richtig verstanden habe, aber das funktioniert bei mir:
String text = "Das ist ein Test mit 1er Zahl"; for(int i = 1; i <= text.Length(); i++) { char c = text[i]; bool shift = true; if(c > 0x60) //Kleinbuchstaben { shift = false; c -= 0x20; } else if(c < 0x40) //Zahlen shift = false; if(shift) keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(c, 0, 0, 0); keybd_event(c, 0, KEYEVENTF_KEYUP, 0); if(shift) keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); }
greetz KN4CK3R
-
Ich hab das ganze etwas abgeändert, aber funktioniert Prima, ich brauche eben noch ein minimum an sonderzeichen dazu:
for (i = 0; i < Edits[EdiNum]->Text.Length(); i++) { bool shift = true; char c = (Edits[EdiNum]->Text[i+1]); if(c > 0x60 && c < 0x7B) //Kleinbuchstaben { shift = false; c -= 0x20; } else if(c < 0x40 && c > 0x30) //Zahlen shift = false; int ResolutionKey = c; switch ((int)Edits[EdiNum]->Text[i+1]) { case(33): { ResolutionKey = 49; shift = true; break; } //... } if(shift) keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(ResolutionKey, 0, 0, 0); keybd_event(ResolutionKey, 0, KEYEVENTF_KEYUP, 0); if(shift) keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
EDIT: Die Formatierung ist flöten gegangen, ich hoffe das stört nicht
-
rein theoretisch kannste dir auch ein chararray (string) anlegen, in dem zu allen ASCII zeichen von 0 - 255 die entsprechenden Keycodes stehen. Dann kannst du das ganze noch ein wenig einfacher machen. Dazu noch ein bool array ob shift oder kein shift eventuell.
int c = (int)text[i]; if(shiftarray[c]) keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(keycodearray[c], 0, 0, 0); keybd_event(keycodearray[c], 0, KEYEVENTF_KEYUP, 0); if(shiftarray[c]) keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
Wenn man ein wenig rumtrickst, kann man sich die beiden Arrays vom Programm anlegen lassen, ansonsten einfach von Hand erstellen.
greetz KN4CK3R
-
Noch was: Wie kann ich denn die abgefangene Taste "rausnehmen"
Praktisch die Taste abfangen und aussortieren, sonst wird das sowas:
5TEXT oder 6ANDERERTEXT
...Überhaupt möglich ?
-
Mir kam so Backspace grad in den Sinn