Robot (Informatik)

Aus SibiWiki
Zur Navigation springen Zur Suche springen
Klassendiagram Robot.png

Mithilfe der Robot Klasse aus Java, kann man die sogennanten Bots um einen Aimbot für einen Ballerspiel, einen Farmbot für WoW oder einen Spambot für einen Chat zuprogrammieren. Die Robot Klasse übernimmt die Kontrolle über die Maus und Tastatur, kann Scrrenshots erstellen und kann das Bildschirm nach Pixeln absuchen.

Einbinden der Robot-Class

import java.awt.Robot;

Tastatur kontrollieren

Die Robot Klasse stellt Zwei Methoden zur Verfügung um die Tastatur zu beeinflussen.

  • keyPress(keycode)
  • kyeRelease(keycode)

Die keyPress(keycode) Methode drückt einer bestimmten Taste, dafür muss man der Methode einen Integer wert der Taste oder eine KeyEvent Konstante als Parameter mitgeben.
Die keyRelease(keycode) Methode ist dafür da, einer bestimmten Taste loszulassen.

Beispiele

KeyEvent als Parameter

Robo.keyPress(KeyEvent.VK_A);
Robo.keyPress(KeyEvent.VK_A);

Ausgabe:

a

Integer als Parameter

Robo.keyPress(65);
Robo.keyPress(65);

Ausgabe:

a

Tastenkombination

Zuerst wird die Schift-Taste gedrückt gehalten, dann wird A gedrückt gehalten, dann wird Schift losgelassen und schließlich wird die A taste losgelassen.

Robo.keyPress(KeyEvent.VK_SHIFT);
Robo.keyPress(KeyEvent.VK_A);
Robo.keyRelease(KeyEvent.VK_SHIFT);
Robo.keyRelease(KeyEvent.VK_A);

Ausgabe:

A

Maus kontrollieren

Die Robot Klasse stellt Drei Methoden zur Verfügung um die Tastatur zu beeinflussen.

  • mouseMove(x,y)
  • mousePress(buttons)
  • mouseRelease(buttons)
  • mouseWheel(wheelAmt)

Die mouseMove(x,y) Methode dient dazu da, um den Mouse Cursor an einer bestimmten stelle zu verschieben.
Die mousePress(buttons) Methode, drückt einer bestimmten Maustaste.
Die mouseRelease(buttons) Methode ist dafür da, einer bestimmten Maustaste loszulassen.
Die mouseWheel(wheelAmt) Methode ist dafür da, um den Mausrad zusteuern (hoch und runter scrollen etc.).

Beispiele

Maus bewegen und die rechte Maustaste drücken

Zuerst wird den Mouse Crusor auf den Bildschirm zentriert, und dann wird die linke Maustaste gedrückt und wieder losgelassen

Robo.mouseMove(Toolkit.getDefaultToolkit().getScreenSize().width,Toolkit.getDefaultToolkit().getScreenSize().height);
Robo.mousePress(InputEvent.BUTTON3_DOWN_MASK);
Robo.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);

Pixel Ansprechen

Die Bots müssen in der Regel die Pixel analysieren, um z.B. einen Feind zu sehen und auf ihm schießen.
Die Robot Klasse stellt uns ebenfalls eine Methode zur Verfügung die bestimmte Pixel analyisert.

  • getPixelColor(x,y)

Beispiele

Pixel Vergleichen

Im folgenden wird einen Pixel auf den Bildschirm mit einen vorgegebnen Pixel verglichen, natrülich kann man den gesamten Bildschirm mit einen Pixel vergleichen, dafür muss man jedoch eine 2x for-Schleife einbauen.

Color meinPixel = new Color(0,0,0);
if(meinPixel.equals(Robo.getPixelColor(500,500){
   //weiterer Programmiercode
}

Screenshot erstellen

Um einen Screenshot zuerstellen, bietet uns die Klasse Robot eine Sinnvolle Methode an.

  • createScreenCapture(screenRect)

Jedoch ist diese Methode alleine nicht ausreichend, da sie den Screenshot in der Zwischenablage speichert, deswegen benötigen wir die Hilfe von folgenden Klassen:

  • java.awt.Rectangle
  • java.awt.image.BufferedImage
  • java.io.File
  • java.io.IOException
  • javax.imageio.ImageIO

Die Klasse Rectangle deffiniert einen Bereich, der davon einen Screenshot gemacht werden soll. Die Klasse BufferedImage gibt den Screenshot zurück. Die Klasse File erstellt eine leere Datei, wo später das Sreenshot gespeichert wird. Die Klasse ImageIO schreibt den BufferedImage in den erstellten File und so erhalten wir unseren Screenshot. Die Klasse IOException fängt die möglichen Fehlermeldungen ab, die bei den Speichern des Bildes auftreten können.

Hier kommt ein Beispiel: Es wird einen Screenshot ab den Koordinaten (50|100), der 400px breit und 200px hoch ist erstellt und in den BufferedImage img gespeichert.
dann erstellen wir ein Bild namens screenshot.png und speichern den Screenshot mit Hilfe der write(...) Methode der ImageIO Klasse in der screenshot.png Datei rein.

BufferedImage img = Robo.createScreenCapture(new Rectangle(50, 100, 400, 200));
   try {
     ImageIO.write(img, "png", new File("./screenshot.png"));
   }
   catch (IOException e) {
     e.printStackTrace();
   }

Warten

Zwischen den jeweiligen Aktionen, sollte man das Programm pausieren, um es dadurch ein bisschen menschlicher zumachen oder um den PC die zeit zulassen, um den Befehl zu ende zuführen.
Die Robot Klasse bietet vier Methoden an, die für diesen vorhaben geeignet sind.

  • delay(ms)
  • setAutoDelay(ms)
  • waitForIdle()
  • setAutoWaitForIdle(isOn)

Die delay(ms) Methode, pausiert das Programm für die angegebenen Zeit in Millisekunden.
Die setAutoDelay(ms) Methode, pausiert das Programm nach jedem Event der durch den Bot ausgeführt wurde (z.B. drücken der Leertaste) für die angegebene Zeit in Millisekunden.
Die waitForIdle() Methode, wartet, bis alle, Ereignisse abgearbeitet sind.
Die setAutoWaitForIdle(isOn) führt nach jedem Event die Methode waitForIdle() aus.

Beispiele

Chatbot

Bei den meisten Chatservern ist es so, dass es einen Bot-Blockierer gibt, so schaut der Server wie Schnell der Client seine Nachrichten sendet um gegeben falls eine Nachricht wegen Spam zu blocken, um dies zu verhindern bauen wir eine Verzögerung von etwa 1 Sekunde ein.

Robo.keyPress(...);
Robo.keyRelease(...);
   .
   .
   .
Robot.delay(1000);

Nachdem der Bot die Nachricht getippt hat, wartet er eine Sekunde um Menschlicher zu wirken und um nicht von den Automatischen Bot-Blocker geblockt zuwerden.