Robot und Texte

Akeshihiro

Erfahrenes Mitglied
Moin moin ^^

Also in einem anderen Forum hat einer ein Problem. Hier sein Code:
Java:
import java.awt.*;

public class StringRobot
{
  public static void write(String s)
  {
	try
	{
  	Robot r = new Robot();
  	int i = 0;
  	while (i<s.length())
  	{
    	AWTKeyStroke v = AWTKeyStroke.getAWTKeyStroke(s.charAt(i));
    	int j = v.getKeyCode();
    	System.out.println("KeyEvent ist: "+j + " ,ausführlich: " + v);
    	synchronized(r)
    	{
      	r.keyPress(j);
      	r.keyRelease(j);
    	}
    	i++;
  	}
	}
	catch(AWTException e)
	{
  	System.err.println(e);
	}
  }
}

Das funktioniert nicht, AWTKeyStroke spuckt immer eine 0 als KeyCode aus und das führt zu einem Fehler. Seine Bedingung ist aber die, dass er es mit AWT schaffen will. Ich habe mich auch mal an das Problem rangemacht und ihm folgenden Code geschickt:
Java:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class StringRobot {
	public static void write(String s) {
		try {
			Robot r = new Robot();
			char[] arr = s.toCharArray();

			for(int i = 0; i < arr.length; i++) {
				char ch = arr[i];

				// Prüfen, ob das Zeichen ein Großbuchstabe ist und wenn ja,
				// dann soll SHIFT gedrückt werden
				if(Character.isUpperCase(ch)) {
					r.keyPress(KeyEvent.VK_SHIFT);
				}

				// Zeichen-Taste klicken
				r.keyPress(Character.toUpperCase(ch));
				r.keyRelease(Character.toUpperCase(ch));

				// Wenn das Zeichen ein Großbuchstabe war, dann soll SHIFT
				// wieder losgelassen werden
				if(Character.isUpperCase(ch)) {
					r.keyRelease(KeyEvent.VK_SHIFT);
				}
			}
		} catch(AWTException e) {
			e.printStackTrace();
		}
	}
}

Leider funktioniert das auch nicht so ganz, die Sonderzeichen werden entweder nicht richtig ausgegeben oder halt auch gar nicht.

Weiß jemand eine vernünftige Lösung oder ist das Mapping der Zeichen die einzige Alternative?

Bevor mir jemand mit den VK_-Sachen ankommt... Es soll ein Text übergeben werden und dieser soll dann getippt werden.

Also die Anwendung wäre so: StringRobot.write(<Text>);
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück