# Bot Programmieren



## fafrey (3. Dez 2013)

Hallo,

Ich würde gerne einen Bot programmieren der mir mein Berichtsheft ausfüllt :idea::lol:

nur weis ich nicht wie und mit was für befehlen und und und...
wollte hier mal nachfrage hab schon was von einer Robot Klasse gehört nur viel hilft mir das nicht und von Bots hab ich sowieso nicht so viel Ahnung :shock:

Bedanke mich schonmal für die antworten.


----------



## anti-held (3. Dez 2013)

Du solltest schon genauere Angaben geben, was du genau willst.
Ist es ein Excel File das du ausfüllen willst,
gibt es ein extra Programm um das File zu erstellen
oder wie genau läuft das schreiben des Berichthefts normal ab?


----------



## fafrey (3. Dez 2013)

AAAAAAAlso,

Das ist eine Tabelle in einem Word dokument, 
die Zellen die ausgefüllt werden sollen sind die Angaben :

Tätigkeit,
Zeitaufwand für diese Tätigung,
Datum (immer 2 Wochen pro DINA4 Blatt)

sonst gibt es noch die Zellen die ich schon ausgefüllt habe und als Vorlage benutze da sich diese Werte (erstmal)nicht ändern

Ausbildungsjahr,
Abteilung,
Wochentage


MfG fafrey


----------



## anti-held (3. Dez 2013)

Inwiefern soll dir dann dein Java Programm Arbeit abnehmen?
Tätigkeit etc sind ja von Woche zu Woche verschieden!


----------



## fafrey (3. Dez 2013)

Stimmt auch wieder.. ;( :bloed:

aber Datum und Ausbildungsnachweis kann ich mir doch eintragen lassen oder?
die Daten verändern sich zwar auch aber ist das Voraussehbar also müsste es doch gehen oder ?


----------



## anti-held (3. Dez 2013)

Das kann man machen.

Es gibt 2 Möglichkeiten.

Die komplexere ist die mit den Robots, die du erwähnt hast.
Mit ihnen kannst du Tastendrücke, Mausbewegungen und Klicks generieren.
Dann müsstest du dir diese so generieren lassen, dass automatisch die Dateien geöffnet werden,
die Maus an die richtige Stelle fährt und dann etwas schreibt.
Beispiel: Robot Example

Die einfachere wäre, dass du dir das Dateiformat deines Files anschaust.
Öffne es mit dem Editor oder Notepad++.
So kannst du nämlich das File in dein Programm einlesen und an der gewünschten Stelle eben das
Datum oder die Nummer einfügen.
Beispiel: Read File Example


----------



## fafrey (4. Dez 2013)

Vielen dank für die Links hat mir schon sehr geholfen!

Bin jetzt soweit das das heutige Datum angegeben, in einen String gespeichert ist und der Robot funktioniert und einen Text ausgibt.



```
import java.text.DateFormat;                                   // heutiges Datum
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.GregorianCalendar;


import java.awt.*;                                             //Robot
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.*;
import java.applet.Applet;

public class HiBudy3 extends Applet {
  
    
  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 300, 300);
    add(cp);
                            
    
    DateFormat dateFormat = new SimpleDateFormat("ddMMyyyy");  // heutiges Datum
    String str = dateFormat.format(new Date());
    
    try {                                                      //Robot
      Robot robot = new Robot();
      robot.delay(5000);
      robot.keyPress(KeyEvent.VK_H);                        
      robot.keyPress(KeyEvent.VK_I);
      robot.keyPress(KeyEvent.VK_SPACE);
      robot.keyPress(KeyEvent.VK_B);
      robot.keyPress(KeyEvent.VK_U);
      robot.keyPress(KeyEvent.VK_D);
      robot.keyPress(KeyEvent.VK_Y); 
    } catch(AWTException e) {
      e.printStackTrace();
    }    
  }
}
```


Edit: wie kann ich den String mit den keypress ausgeben lassen?


----------



## anti-held (4. Dez 2013)

Nunja... du wirst dir eine Art Mapping anlegen müssen, das die einzelnen Chars des Strings
auf die passenden KeyEvents mappt.

sth like

Aufruf

```
DateFormat dateFormat = new SimpleDateFormat("ddMMyyyy"); // heutiges
																	// Datum
		String str = dateFormat.format(new Date());

		java.awt.Robot robot = new java.awt.Robot();
		robot.delay(500);
		for (Character zeichen : str.toCharArray()) {
			robot.keyPress(getEventForChar(zeichen));
		}
```

Methode

```
private static int getEventForChar(Character zeichen) {
		switch (zeichen) {
		case 'a':
			return KeyEvent.VK_A;
		case 'b':
			return KeyEvent.VK_B;
		case 'c':
			return KeyEvent.VK_C;
			// ...
		case '0':
			return KeyEvent.VK_0;
		case '1':
			return KeyEvent.VK_1;
		case '2':
			return KeyEvent.VK_2;
			// ...
		case '.':
			return KeyEvent.VK_PERIOD;
		case ',':
			return KeyEvent.VK_COMMA;
			// ...
		default:
			return -1;
		}
	}
```


----------



## slanza99 (9. Apr 2018)

There are now better ways to read from a file in Java for your question. You can use java.nio.file.Files.readAllBytes () which is faster than BufferedReader that Anti-Hero posted:


```
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

public class ReadFile_Files_ReadAllBytes {
  public static void main (String [] pArgs) throws IOException {
    String fileName = "c: \\ temp \\ sample-10KB.txt";
    File file = new File (fileName);

    byte [] fileBytes = Files.readAllBytes (file.toPath ());
    char singleChar;
    for (byte b: fileBytes) {
      singleChar = (char) b;
      System.out.print (singleChar);
    }
  }
}
```


----------



## Java20134 (11. Apr 2018)

Du könntest auch eine Bibliothek von Apache nutzen, um dein Word-Dokument einzulesen, anschließend zu bearbeiten und zum Schluss wieder abzuspeichern!


----------



## Blender3D (12. Apr 2018)

fafrey hat gesagt.:


> Hallo,
> 
> Ich würde gerne einen Bot programmieren der mir mein Berichtsheft ausfüllt :idea::lol:


Was hat das mit Spieleprogrammierung zu tun ?


----------

