# Programme steuern



## kopfkino (6. Juli 2011)

Moin,;-]

Ick wollte mal fragen ob es eine Möglichkeit gibt Programme mit Java zu steuern.
z.B Ick öffne notepad mit

```
Runtime.getRuntime().exec("notepad")
```
und wenn notepad öffen ist will ick einen Text rein schreiben.
Kann man das machen?


----------



## SE (6. Juli 2011)

Hi und willkommen im Tut-Forum.
Ja natürlich kannst du das machen ... aber nicht dierekt über die Process-Klasse da Notepad keine Pipes verwendet. Bei Programmen die über Pipes steuerbar sind siehts da schon besser aus. Aber um jetzt automatisch einen Text in Notepad zuschreiben bräuchst du einen sog. Robot *weis jetzt nich ausem Kopf wo der genau liegt*.

Kurze gegenfrage : WO ZU ?
Vielleicht gibt es für das was du EIGENTLICH vorhast einen besseren Weg.


----------



## kopfkino (6. Juli 2011)

danke fürs Willkomen^^

Ach nur so. Ick hatte zum ersten mal Befehl an die cmd geschickt und die Antwort ausgegeben.
Das hatte mich gefreud und da hab ick gleich versucht mit TAB(\t), wie man es in der cmd kann,
das Wort cd pro zuende schreiben zu lass

```
Process proc = Runtime.getRuntime().exec("cmd");
			PrintWriter w=new PrintWriter(proc.getOutputStream());
		    Scanner sc = new Scanner(proc.getInputStream());
		   
			w.write("cd\\ \n");
			Thread.sleep(500);
			w.write("cd pro\t \n");
			Thread.sleep(500);
			w.flush();
			w.close();
			while(sc.hasNextLine()) {
		        System.out.println(sc.nextLine());
```
 aber nix passiert. Nicht mal ein Fehlermeldung, dass das Verzeichnet nicht gefunden werden kann.
Da dachte ick mir, dass es bestimmt eine möglichkeit gibt die cmd so anzusprechen, wie die Eingabe über die Tastatur, und dass das bei ander Programmen auch geht.
Aber das mit Robot hört sich ja nicht schlecht an.  
Ick hoffe es nicht leicht zu verstehen 

bis denne (morgen^^)


----------



## SE (6. Juli 2011)

AU ... da sind ja mal ganz böse Fehlerteufel drin.

1) Deine Denkweise
Wenn du TAB drückst schreibt die Console kein \t hin sondern verarbeitet dies als Steuertaste. Der Prompt bekommt davon nichts mit. Das ist auch der Grund warum man auch kein \t schreiben kann die die Console dies nunmal VORHER abfängt.

2) Dein Code
Vom Prinzip her tut er genau das was er soll. Und an sich ist er auch richtig. Aber das da deutet darauf hin das du noch nicht so viel mit Java gemacht hast. Sowas geht viel bequemer und einfacher. Auch hast du scheinbar keine Ahnung von bi-direktionaler Kommunikation. in Zeile 10 deines Posts schließt du den PrintWriter. Das hat zur Folge das du danach NICHTS mehr an die Console senden kannst. Und auch das Lesen geht nur noch bedingt. Bei Socket-Verbindungen würde dann in der while eine Exception kommen da der Stream geschlossen wurde.

3) Deine Schreibweise
Ich habe nichts gegen Eigenheiten im Schriftbild, aber hier auf Tutorials verlangen wir dann doch das die Posts in Hochdeutsch verfasst sind. *Lass mal ... auch ich musste es schmerzvoll lernen *die MOD's mal anschiel** Außerdem sieht es so nicht schön aus.

4) Richtige Code-Tags
Es gibt eine ganze Reihe von Code-Tags für spezielle Sprachen, unter anderem auch für Java. In meiner Signatur sind die Java-spezifischen Tags zu sehen. Bitte verwende diese bei deinen nächsten Posts da dies die Lesbarkeit deutlich erhöt.

5) Zu deinem Problem nun selbst
Das was du da vorhast kann man deutlich eleganter lösen. Du hast in Java zugriff auf eine breite Palette von Datei- und Ordner-Funktionen. Du kannst mit relativen und absoluten Pfaden arbeiten. Auch kannst du dir dierekt Objekte erstellen welche dann zum Beispiel auf einen Ordner oder eine Datei zeigen und dann von dieser aus alles relativ weiter machen *auch wenn das nicht so das super Design wäre ... aber ein Anfang wäre es*.
Vielleicht beschreibst du uns doch mal lieber genauer was du da vorhast ... vielleicht können wir dir da was elegantes und vor allem : sauberes zusammenbasteln.


----------



## kopfkino (7. Juli 2011)

Ich dachte das \t auch klappt, weil \n auch geklappt hatte 

Ich möschte gern irgentwelche Programme bedienen ohne selbst die Mause zu benutzten, so z.B. dass man AntiVir öffnet und dann auf Systemdurchsuchen klickt.


----------



## SE (7. Juli 2011)

Das \n geklappt hat liegt daran das es offiziell als NEW LINE im ASCII-Code steht. TAB Steht zwar auch als TABULATOR drin ... aber mit der Anmerkung das TAB eine Steuertaste auf einer Tastatur ist. Dies gilt nicht für \n und RETURN ... da RETURN ebenfalls eine Steuertaste ist und das System entscheidet was bei einem Druck auf diese Taste geschiet.

Was dein Vorhaben angeht :
Es gibt schon eine Möglichkeit dies mit Java umzusetzen ... das ist aber nicht sehr sicher. Wenn z.B. das wo du drauf klicken willst plötzlich an einer anderen Stelle ist oder sich etwas über das Fenster welches du manipulieren willst drüberlegt hast du schon verloren.
Es ist auch egal mit welcher Sprache du sowas machst ... einige können etwas mehr andere etwas weniger. Fakt ist : einen Bot zu nehmen nur um sich ein paar Mausklicks zu ersparen sehe ich als wirklich EXTREME Faulheit an ... du brauchst von mir also bei diesem Thema keine weitere Hilfe zu erwarten.
Das einzige was ich dir noch sage ist : ja es ist möglich.


PS : gerade was Sicherheitssoftware angeht haben fast alle heutzutage sogenannte Planer drin die solche Aufgaben intern erledigen ... da brauchst du noch nicht mal was zu machen.


----------



## Akeshihiro (7. Juli 2011)

Java ist in der Hinsicht durch die VM etwas eingeschränkt, da die Möglichkeiten relativ beschränkt sind, wenns um solche Sachen geht. Wenn man auf die System-APIs zugreifen kann, dann sieht die Sache schon anders aus. Ist zwar mit Java möglich (über Umwege), aber dann verliert Java die Plattformunabhängigkeit, und die ist nunmal die Besonderheit an Java.

Für solche Kleinigkeiten-Bots würde ich auch keine komplette Hochsprache hochfahren. Skriptsprachen, wie AutoIt, sind klein, handlich, aber dennoch sehr mächtig. Zudem kann AutoIt Elemente wie Buttons oder auch andere, ansteuern, ohne die Maus dafür zu benutzen. Das hat den Vorteil, dass man das Programm minimiert laufen lassen und selber normal weiter arbeiten kann ohne gestört zu werden.


----------



## HonniCilest (7. Juli 2011)

> Ich möschte gern irgentwelche Programme bedienen ohne selbst die Mause zu benutzten, so z.B. dass man AntiVir öffnet und dann auf Systemdurchsuchen klickt.



Einige Programme lassen sich auch mit Parametern öffnen, bei denen direkt was geschieht oder der Parameter ist ein Pfad zu einer Skriptdatei, die einen bestimmten Ablauf beschreibt. Ob z.B. AntiVir soetwas kann weiß ich nicht, mag ich auch glauben, aber wer weiß, schau doch einfach mal...


----------



## kopfkino (7. Juli 2011)

Danke für die Antworten 
Das mit AntiVir war nur eine Beilspiel
und meine Idee ist auch noch nicht
so vollendet, dass man danach hilfe
fragen kann ^^ .
Aber das mit der Robot-Klasse ist schon 
eine schöne spielerrei und das mit den
System-APIs hört sich auch sehr Interessant
an. Also wenn da einer ein Tutorial oder 
eine gute Seite zum nach lessen hat.
Immer her damit.

grüße von mir


----------



## FeliXXL (24. Juli 2011)

Ich glaube das wäre nach deinen Beschreibungen und Vorkenntnissen wahrscheinlich die beste Lösung:
http://www.macrox.de/bots
Versuchs mal


----------

