Donnerstag, 26. März 2009

Tastendrück simulieren mit Robot

Hallo zusammen, neulich habe ich durch eine in einer Diskussion in meinVZ.org eine neue Klasse kennengelernt, mit der man tatsächlich Tastendrücke simulieren kann. Erst dachte ich, der Fragende wollte eine Robotersimulation schreiben bis ich bemerkte, dass die Klasse Robot im package java.awt liegt.

Hier folgt das Programm, welches Ergebnis der Diskussion war, falls es jemanden interessiert. Vorsicht, bei mir war es tatsächllich so, dass wenn ich das Programm gestartet habe und dann in mein Eclipse gewechselt habe, dort jede Menge "A"-Zeichen in den aktuellen Text "getippt" wurden.




import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;


public class Test {


static boolean pause = true;


public static void main( String[] args ) throws AWTException {

JFrame win = new JFrame();
win.setSize( 100, 100 );
win.setVisible( true );

win.addKeyListener( new KeyListener() {


public void keyPressed( KeyEvent e ) {

if( e.getKeyCode() == KeyEvent.VK_F6 ) {
pause = false;
System.err.println( "ende pause" );
}
else {
if( e.getKeyCode() == KeyEvent.VK_F7 ) {
pause = true;
System.err.println( "start pause" );
}
}
}


public void keyReleased( KeyEvent e ) {
}


public void keyTyped( KeyEvent e ) {
}
} );

Robot robot = new Robot();

while( true ) {

while( !pause ) {
int z = (int) ( Math.random() * 100 ); //zufallszahl zwischen 200 und 300
int u = (int) ( Math.random() * 50 ); //zufallszahl zwischen 50 und 100
robot.delay( z ); //warte z ms
robot.keyPress( KeyEvent.VK_A ); // druecke A
System.out.println( "Press A" );
robot.delay( u ); //warte u ms
robot.keyRelease( KeyEvent.VK_A );// lasse A los
System.out.println( "Release A" );
}

while( pause ) {
try {
Thread.sleep( 1000 );
}
catch( InterruptedException ex ) {
ex.printStackTrace();
}
}

}

}


}




Ciao
Lars