# string/char to keycode



## herzog (17. Feb 2010)

Hallo,
ich wollte eigentlich nur zu einem Zeichen den passenden KeyCode herausfinden, aber suche mich schon dämlich nach einer Funktion.

Im Endeffekt soll es mal so sein, dass das Programm eine Zeile aus einer Textdatei ausliest und dann in openoffice schreibt. (verfolgt keinen tieferen Sinn, nur zu Übungszwecken),
Die Mausbewegung und klicks klappen schon, aber die Umwandlung eines Zeichens in den KeyCode nicht. Habe folgendes gefunden:


```
char c = 'D';
KeyStroke stroke = KeyStroke.getKeyStroke(c);
System.out.println(stroke.getKeyCode());
```

Allerdings ist die Ausgabe immer null.

Ich hoffe ihr könnt ein wenig Licht in mein Dunkel bringen


----------



## punkt21 (17. Feb 2010)

versuch mal das hier


```
KeyStroke ks = KeyStroke.getKeyStroke('k', 0);
		System.out.println(ks.getKeyCode());
```


----------



## herzog (17. Feb 2010)

hey, vielen dank. was genau bewirkt die 0 denn?

Ich bekomme jetzt auch die Keycodes, allerdings klappt es nicht den Text dann auch zu tippen.


```
String text = "hallo";
        char[] chars = text.toCharArray();
        int[] codes = new int[chars.length];

        for (int i = 0; i < chars.length; i++) {
            KeyStroke stroke = KeyStroke.getKeyStroke(chars[i], 0);
            System.out.println(stroke.getKeyCode());
            codes[i] = stroke.getKeyCode();
        }

        Robot rob = new Robot();
        rob.mouseMove(707,404); // Mauszeiger bewegen
        rob.delay(2000); // warte 2 Sekundena
        rob.mousePress(InputEvent.BUTTON1_MASK); // linke Maustatse drücken
        rob.mouseRelease(InputEvent.BUTTON1_MASK);
        
        for (int i = 0; i < codes.length; i++) { //Text tippen
            rob.keyPress(codes[i]);
            rob.keyRelease(codes[i]);           
        }
```

Anstatt "hallo" gibt es leider nur "81,,/". Wo liegt da der Fehler? Sind die Keycodes gar nicht das was ich brauche?


----------



## Michael... (17. Feb 2010)

Robot arbeitet mit Events --> KeyEvent != KeyStroke

Biete openoffice nicht eine Schnittstelle zu Java?


----------



## punkt21 (17. Feb 2010)

Java Programming - Problem with KeyStroke (keyCode)

guck da mal rein. ich vermute du hast das selbe problem wegen den KeyStrokes und KeyEvents


----------



## herzog (19. Feb 2010)

ok, da strokes und events nicht das Gleiche sind, kann es so nicht klappen. Aber ist denn die einzige Lösung, falls ich einen von mir gegebenen String automatisch tippen lassen möchte, dass ich mir eine Funktion schreibe, der ich ein Zeichen übergebe und diese mir das Event, also den dann passenden Integerwert, zurückgibt? Sprich alle Zeichen und Codes von Hand abtippen?
Das kann doch nicht sein...


----------



## Ein Keks (19. Feb 2010)

das hier funktioniert zumindest für die zeichen a-z, A-Z und Space

```
private void writeString(String s) {
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if (Character.isUpperCase(c)) {
				r.keyPress(KeyEvent.VK_SHIFT);
			}
			r.keyPress(Character.toUpperCase(c));
			r.keyRelease(Character.toUpperCase(c));

			if (Character.isUpperCase(c)) {
				r.keyRelease(KeyEvent.VK_SHIFT);
			}
		}
		r.delay(delay);
	}
```


----------



## herzog (28. Feb 2010)

Danke, hat alles geklappt, bei den Zahlen habe ich es dann "manuell" mit einer switch Struktur gemacht.


----------

