# Programm, das nach abgearbeiteter main Methode weiterläuft



## Guenter123987 (27. Feb 2017)

Mein Programm wartet via KeyListener auf Tastatureingaben und reagiert darauf. Das heißt, es hat keine main Methode, die feste Befehle abarbeitet. Es arbeitet also in diesem Aspekt ähnlich wie eine Nutzeroberfläche. Das Problem ist, dass ich das Programm zurzeit nicht starten kann, da schlicht und einfach die main Methode leer ist. Das muss doch irgendwie zu beheben sein, sonst gäbe es ja nicht JFrame. Oder?


----------



## Joose (27. Feb 2017)

Guenter123987 hat gesagt.:


> Das heißt, es hat keine main Methode, die feste Befehle abarbeitet.


Jedes Programm braucht aber eine main-Methode, diese ist nun mal der Startpunkt. Bei einem JFrame erzeugt man auch ein entsprechendes Objekt und setzt dieses dann sichtbar.


Guenter123987 hat gesagt.:


> Das Problem ist, dass ich das Programm zurzeit nicht starten kann, da schlicht und einfach die main Methode leer ist. Das muss doch irgendwie zu beheben sein, sonst gäbe es ja nicht JFrame. Oder?


Wie soll denn dein Programm auf Tastatureingaben reagieren? Wie schaut denn der aktuelle Code aus? (vereinfacht reicht auch)
Wo hängt der KeyListener dran? An einer UI Komponenten? Wenn du diese nicht anzeigst wird sie auch nie den Fokus bekommen.


----------



## Guenter123987 (27. Feb 2017)

```
public class Tastenreaktion implements KeyListener {
   @Override
   public void keyPressed(KeyEvent e) {
       reagiere;
   }
}
```
Ist stark vereinfacht, es sind ja nicht mal alle Methoden aus dem Interface vorhanden. Aber so ist bisher die Grundstruktur.


----------



## thecain (27. Feb 2017)

Ein bisschen zu stark vereinfacht....


----------



## Guenter123987 (27. Feb 2017)

Ok, das ist das komplette bisherige Programm. Sicherlich nicht zu stark vereinfacht. Da es noch nicht fertig ist, könnten im Textdokument natürlich Dinge doppelt stehen wegen den beiden Methoden. Das soll später dort verhindert werden, wo jetzt if (true) steht.
	
	
	
	





```
package main;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main implements KeyListener {
 
   static long startMillis;
 
   @Override
   public synchronized void keyTyped(KeyEvent e) {
       char typedChar = e.getKeyChar();
       try {
           FileWriter fw = new FileWriter("C:\\Users\\Timon\\.p2\\Notizen.txt");
           BufferedWriter bw = new BufferedWriter(fw);
       
           bw.write(getRuntimeSeconds() + " " + typedChar);
       
           bw.close();
           fw.close();
       
       } catch (IOException exc) { exc.printStackTrace(); }
   }

   @Override
   public synchronized void keyPressed(KeyEvent e) {
       int typedKeyIndex = e.getKeyCode();
       String typedKeyString = KeyEvent.getKeyText(typedKeyIndex);
       try {
           FileWriter fw = new FileWriter("C:\\Users\\Timon\\.p2\\Notizen.txt");
           BufferedWriter bw = new BufferedWriter(fw);
       
           if (true) {
               bw.write(getRuntimeSeconds() + " " + typedKeyString);
           }
       
           bw.close();
           fw.close();
       
       } catch (IOException exc) { exc.printStackTrace(); }
   }
 
   public static void main(String[] args) throws InterruptedException {
       startMillis = System.currentTimeMillis();
   }
 
   static String getRuntimeSeconds() {
       return Long.toString((System.currentTimeMillis() - startMillis) / 1000);
   }

   @Override
   public void keyReleased(KeyEvent e) { /*nur wegen Interface nötig*/ }
}
```


----------



## Guenter123987 (27. Feb 2017)

Mir ist der Gedanke gekommen, dass ich vielleicht in der main Methode eine Instanz der eigenen Klasse erstellen muss, da die 3 Methoden aus dem Interface ja nicht statisch sind. Hat aber auch nicht geklappt.


----------



## thecain (27. Feb 2017)

Du musst in der Main überhaupt mal etwas machen... deine main führt ein statement aus und das Programm ist zuende.


----------



## Guenter123987 (27. Feb 2017)

Das heißt, ich schreibe in die Main einfach irgendeine while(true) Schleife, damit das Programm nicht aufhört?


----------



## thecain (27. Feb 2017)

Nein, der KeyListener muss einer Komponente hinzugefügt werden, welche dann im Fokus ist. Ohne GUI wird das nicht funktionieren.


----------



## Guenter123987 (27. Feb 2017)

Kann ich eine GUI nehmen, bei der visible false ist? So ein Keylogger sollte ja nicht unbedingt gesehen werden.
Ich mach den Keylogger nur, um zu gucken, obs in Java möglich ist. Ich mach keine schlimmen Sachen damit.


----------



## thecain (27. Feb 2017)

Nein, die GUI muss im Fokus sein.


----------



## Guenter123987 (27. Feb 2017)

Mist. Das heißt, ich kann ohne sichtbares Fenster gar keine Tastatureingaben abfragen? Das ist irgendwie komisch, dann könnte man ja keinen Hintergrundprozess via Shortcut beenden.


----------



## Guenter123987 (28. Feb 2017)

Es muss möglich sein, dass man nur eine Instanz einer spezifischen Klasse erstellen muss und das Programm läuft durch, bis System.exit(0);. Es kann gar nicht anders sein, weil man JFrame ja auch einfach nur instanziiert und es läuft durch. Und JFrame ist ja auch eigentlich nur eine Klasse.
Dann könnte ich ja theoretisch einfach den Source Code von JFrame durchgucken und gucken, wie das funktioniert. Habe ich versucht, aber ich finde mich in der ewig langen Klasse nicht zurecht. Und sie erbt auch noch von Window (auch ewig lang) und Window erbt von Frame (ebenfalls kilometerlang). Hat irgendjemand von euch eine Idee, wie es funktionieren könnte? Ansonsten lese ich mir das alles durch, und wenn es Monate braucht.


----------



## Guenter123987 (28. Feb 2017)

Ok, es liegt in der Klasse Window. Erkenne aber noch nicht den Trick, sieht bisher aus wie ein ganz normaler Konstruktor.


----------



## Guenter123987 (28. Feb 2017)

Oh Gott, es liegt in Frame. Wie viele Mutterklassen gibt es denn noch?


----------



## Guenter123987 (28. Feb 2017)

Liegt im Framekonstruktor Zeile 419. Verweist auf die "init"-Methode Zeile 449. Und da komme ich nicht weiter. Kann mir da jemand helfen? Ich weiß nicht, was this in Zeile 450 und 451 bedeutet. Wäre sehr dankbar.
Kann es sein, dass this auf die Instanz verweist, die gerade erstellt wird?


----------



## Guenter123987 (28. Feb 2017)

Wenn dem so wäre, würde es Sinn ergeben. Dann würde nichts zum gewünschten Effekt führen können, außer dass
	
	
	
	





```
sun.awt.SunToolkit.checkPolicy(<Frame-Instanz, die gerade erstellt wird>, false)
```
 aufgerufen wird.


----------



## Guenter123987 (28. Feb 2017)

Das hier ist die Methodendeklaration.
	
	
	
	





```
public static void checkAndSetPolicy(Container cont, boolean isSwingCont)
   {
       FocusTraversalPolicy defaultPolicy = KeyboardFocusManager
           .getCurrentKeyboardFocusManager().getDefaultFocusTraversalPolicy();

       String toolkitName = Toolkit.getDefaultToolkit().getClass().getName();
       // if this is not XAWT then use default policy
       // because Swing change it
       if (!"sun.awt.X11.XToolkit".equals(toolkitName)) {
           cont.setFocusTraversalPolicy(defaultPolicy);
           return;
       }

       String policyName = defaultPolicy.getClass().getName();

       if (DefaultFocusTraversalPolicy.class != defaultPolicy.getClass()) {
           // Policy was changed
           // Check if it is awt policy or swing policy
           // If it is Swing policy we shouldn't use it in AWT frames
           // If it is AWT policy  we shouldn't use it in Swing frames
           // Otherwise we should use this policy
           if (policyName.startsWith("java.awt.")) {
               // AWT
               if (isSwingCont) {
                   // Can't use AWT policy in Swing windows - should use Swing's one.
                   defaultPolicy = createLayoutPolicy();
               } else {
                   // New awt policy.
               }
           } else if (policyName.startsWith("javax.swing.")) {
               if (isSwingCont) {
                   // New Swing's policy
               } else {
                   defaultPolicy = new DefaultFocusTraversalPolicy();
               }
           }
       } else {
           // Policy is default, use different default policy for swing
           if (isSwingCont) {
               defaultPolicy = createLayoutPolicy();
           }
       }
       cont.setFocusTraversalPolicy(defaultPolicy);
   }
```
Man könnte auf jeden Fall eine Frame-Instanz übergeben, weil Frame von Window erbt und Window von Container. Also ist Container eine Mutterklasse von Frame.
Und wer sich das fragt: policy heißt in dem Fall Regel oder Verfahrensweise.


----------



## Harry Kane (28. Feb 2017)

Um "nur mal zu gucken, obs überhaupt geht", investierst du aber ziemlich viel Mühe.
Am Ende dürfte die Erkenntnis stehen, dass ein Java KeyListener nicht global/windowsweit arbeitet, sondern nur innerhalb einer Java GUI.


----------



## Guenter123987 (28. Feb 2017)

Ich sehs ja schon ein, dass es nicht geht. Aber wie ein Programm funktioniert, das laufend reagiert und nicht etwas Festes abarbeitet, möchte ich trotzdem herausfinden. Da suche ich weiter, bis ichs weiß.


----------



## mrBrown (28. Feb 2017)

Guenter123987 hat gesagt.:


> Aber wie ein Programm funktioniert, das laufend reagiert und nicht etwas Festes abarbeitet, möchte ich trotzdem herausfinden. Da suche ich weiter, bis ichs weiß.


Es gibt 'nen Thread, der im Hintergrund läuft.


----------



## Guenter123987 (28. Feb 2017)

mrBrown hat gesagt.:


> Es gibt 'nen Thread, der im Hintergrund läuft.


Ja schon, aber der Thread müsste doch auch auslaufen. Oder ist das eine while(true)-Schleife, die eine Bedingung prüft?


----------



## Joose (1. Mrz 2017)

Da die Seite sollte etwas Licht in die Sache bringen wie das bei dem GUI ist 
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html


----------



## Guenter123987 (1. Mrz 2017)

Ok, danke, Joose. Habe mir das angeguckt. Es wird ein Thread gestartet, der die Fensterkomponente erstellt. Das Programm tut dann nichts, bis du auf einen Knopf drückst. Und wie man dieses Nichtstun, ohne dass der Dienst sich beendet, hinkriegt, das interessiert mich. Bisher kriege ich Nichtstun nur für eine gewisse Zeitspanne hin und nicht bis eine boolsche Bedingung eintrifft. Also hat mir der Link leider nicht geholfen. Vielleicht habe ich ihn aber auch nur nicht richtig verstanden.


----------



## Joose (1. Mrz 2017)

> Their most essential job is to create a Runnable object that initializes the GUI and schedule that object for execution on the event dispatch thread


In Java gibt es einen speziellen Thread für GUI welcher das EventHandling usw. übernimmt -> https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html


----------



## Guenter123987 (1. Mrz 2017)

Habe es jetzt begriffen. Eignet sich irgendwie nicht gut für meine Zwecke. Ich glaube, was ich machen möchte, fehlt noch komplett in Java.
Wenn man eine Taste drückt, geht davon ein elektrisches Signal aus. Und ein Signal kann einen Vorgang starten. Sonst könnte man ja Windows nicht booten. Der Vorgang ist einfach eine Methode. Dann muss nicht dauerhaft ein Dienst laufen, der guckt, was gedrückt wird. Das muss man doch irgendwie verwirklichen können. Oder sind da schon die Grenzen von Java erreicht?


----------



## thecain (1. Mrz 2017)

Du brauchst JNI (C Code) o.ä. damit du auf einen Keyboard Interrupt hören kannst und ensprechend reagieren


----------



## Jardcore (2. Mrz 2017)

Schau dir mal folgende Klasse der Java API an.
https://docs.oracle.com/javase/8/docs/api/java/awt/Robot.html

Damit haben wir früher im Studium Keylogger gebaut, man braucht dafür auch keine GUI


----------



## JStein52 (2. Mrz 2017)

Jardcore hat gesagt.:


> Damit haben wir früher im Studium Keylogger gebaut


Aber damit kann man doch keine KeyLogger bauen sondern man kann per Programm Keys "drücken" bzw. die Maus "bedienen".


----------



## Guenter123987 (2. Mrz 2017)

Die Klasse ist interessant. Ich habe gerade nicht die Ressourcen, mir ein JNI Buch zu kaufen, also werde ich mit Robot arbeiten. Obwohl das eigentlich nicht ganz das ist, wonach ich gesucht habe.


----------



## Jardcore (2. Mrz 2017)

Okay hab gerade den alten Code gesucht, dort haben wir tatsächlich auch JNI benutzt. Sry ^^


----------



## Guenter123987 (2. Mrz 2017)

Also funktioniert java.awt.Robot nicht? Wenn er funktioniert, dann kann ich damit theoretisch sogar Passwörter knacken und das korrekte Passwort aufschreiben.
Funktioniert so: Die Farbwerte vom aktuellen Pixel von der Maus werden am Anfang ausgelesen und in einer Variablen gespeichert. Solange der aktuelle Farbwert dem Startfarbwert entspricht, werden Strings erstellt, die dann in einer Textdatei aufgeschrieben und danach eingetippt werden. Im nächsten Durchlauf wird noch am Anfang die Textdatei geleert.


----------



## thecain (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Wenn er funktioniert, dann kann ich damit theoretisch sogar Passwörter knacken und das korrekte Passwort aufschreiben.


Ich glaube das "Keylogger nur zum test" langsam nicht mehr... bin mal raus...


----------



## JStein52 (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Also funktioniert java.awt.Robot nicht?


Nicht für das was du willst. Mit dem Robot() kannst du Tastendrücke und MouseMoves erzeugen aber keine Events zu Tastendruck bzw. Mouse-Bewegung abfangen.


----------



## JStein52 (2. Mrz 2017)

Aber du kannst mal da gucken:

http://www.tutego.de/blog/javainsel...ndrucke-und-mausoperationen-abfangen-windows/


----------



## Guenter123987 (2. Mrz 2017)

thecain hat gesagt.:


> Ich glaube das "Keylogger nur zum test" langsam nicht mehr... bin mal raus...


Ich möchte herauskriegen, wie man an ein Administratorpasswort kommt und es dann an Microsoft und Oracle schicken. Ich hoffe, dass ich dadurch viel lerne, auch in Hinsicht auf Accountsicherheit in meinem eigenen Compterspiel. Aber das glaubt einem kein Schwein, deshalb habe ich am Anfang versucht, es zu verbergen.


JStein52 hat gesagt.:


> Nicht für das was du willst. Mit dem Robot() kannst du Tastendrücke und MouseMoves erzeugen aber keine Events zu Tastendruck bzw. Mouse-Bewegung abfangen.


Aber das dokumentieren, was der Robot eingibt, müsste doch gehen, oder? Dann könnte man das Passwort ähnlich knacken wie bei alten PINs. Wäre eine noch viel größere Lücke.


----------



## Guenter123987 (2. Mrz 2017)

Wobei der Link auch gut ist. Das wäre dann das, was ich ursprünglich machen wollte.
Edit: Ist er doch nicht, die benötigten Werkzeuge kann man nicht mehr herunterladen. Seitenladefehler.
Noch ein Edit (tut mir leid): Habe doch noch eine Seite für den Download gefunden: https://marketplace.eclipse.org/content/swt-win32-extension


----------



## JStein52 (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Aber das dokumentieren, was der Robot eingibt, müsste doch gehen, oder? Dann könnte man das Passwort ähnlich knacken wie bei alten PINs.


Keine Ahnung was du damit meinst ? Warum willst du das dokumentieren ? Du musst den Robot ja eh programmieren und ihm sagen was er tun soll, jeden Tastendruck, jede Mausbewegung. Also weisst du dann ja schon alles.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Ich möchte herauskriegen, wie man an ein Administratorpasswort kommt und es dann an Microsoft und Oracle schicken. Ich hoffe, dass ich dadurch viel lerne, auch in Hinsicht auf Accountsicherheit in meinem eigenen Compterspiel. Aber das glaubt einem kein Schwein, deshalb habe ich am Anfang versucht, es zu verbergen.



Und was willst du daraus lernen? An nem Keylogger gibts nicht allzu viel zu lernen...da kommst du vermutlich weiter, wenn du einfach fragst, was du wissen willst...


----------



## Guenter123987 (2. Mrz 2017)

Es sollen Strings generiert werden, sodass nach und nach alle Möglichkeiten durchgegangen werden. Diese Strings tippt der Robot in die Zeile und drückt Enter. Irgendwann ist er dann ja durch. Aber damit er nicht jedes Mal neu alles durchprobieren muss, schreibt er das richtige Passwort in ein Textdokument. Das kann ich ja nicht wissen, wie dann das richtige Passwort lautet.


----------



## Guenter123987 (2. Mrz 2017)

mrBrown hat gesagt.:


> Und was willst du daraus lernen? An nem Keylogger gibts nicht allzu viel zu lernen...da kommst du vermutlich weiter, wenn du einfach fragst, was du wissen willst...


Endlich mal ein Programm, das funktioniert und einen Sinn hat, gescheit auf ein Textdokument zugreifen, mit Lesemethoden für Tastaturanschläge beziehungsweise mit dem Robot arbeiten.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Es sollen Strings generiert werden, sodass nach und nach alle Möglichkeiten durchgegangen werden. Diese Strings tippt der Robot in die Zeile und drückt Enter. Irgendwann ist er dann ja durch.


Wie viele Tage (Monate/Jahre) möchtest du deinen Rechner laufen lassen?


----------



## Guenter123987 (2. Mrz 2017)

Braucht das so lange? Ich meine, wenn es 48 Stunden braucht, wäre es immer noch eine größere Lücke und irgendwie sinnvoll, weil man ja den Vorgang abbrechen und später fortsetzen kann. Aber dann irgendwann nicht mehr.
Edit: Es gibt ja auch Heim-PCs mit i7, die müssten das doch recht schnell durchrechnen können.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Endlich mal ein Programm, das funktioniert und einen Sinn hat, gescheit auf ein Textdokument zugreifen, mit Lesemethoden für Tastaturanschläge beziehungsweise mit dem Robot arbeiten.



Also einen Keylogger, um lernen, wie man einen Keylogger schreibt, und der Sinn des Programms ist dann, mal einen Keylogger geschrieben zu haben 

Ganz ehrlich - mach mit deiner Zeit was sinnvolleres  "Richtig" funktionieren wird das bei deinem jetzigem Kenntnisstand vermutlich nie.


----------



## Guenter123987 (2. Mrz 2017)

Es interessiert mich aber.


----------



## mrBrown (2. Mrz 2017)

Glaub ich gern - es wäre aber ratsam, erstmal weiter Grundlagen zu lernen


----------



## Guenter123987 (2. Mrz 2017)

Das ist langweilig, die sich anzulesen, ohne ein Ziel vor Augen zu haben. Und ein Hobby sollte niemals langweilig sein.


----------



## Guenter123987 (2. Mrz 2017)

Weiß eigentlich jemand ne Antwort auf Post 43?


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Weiß eigentlich jemand ne Antwort auf Post 43?


Ja, es kann so lange dauern.
Die meisten Programme sind gegen solch primitive Angriffe geschützte, mit jedem Fehlversuch steigt die Wartezeit zum nächsten versuch.

Sei es nur, die Wartezeit steigt jeweils eine Sekunde, dann brauchst du für die ersten 100 Versuche über eine Stunde


----------



## Guenter123987 (2. Mrz 2017)

mrBrown hat gesagt.:


> Sei es nur, die Wartezeit steigt jeweils eine Sekunde, dann brauchst du für die ersten 100 Versuche über eine Stunde


Oh. Ich habe mich ja auf das Administratorpasswort festgelegt, läuft es da genauso?
Edit: Tut es nicht, habs grad ausprobiert.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> das Administratorpasswort


wovon? Deines Windows-PC?


----------



## Guenter123987 (2. Mrz 2017)

Jap. Ich habe das schon, aber ich will gucken, ob das Programm es auch findet.


----------



## mrBrown (2. Mrz 2017)

Keine Ahnung, hab kein Windows.

Gibst da überhaupt während des laufenden Betriebs ein Fenster, in dem du das beliebig oft eingeben kannst?


----------



## Guenter123987 (2. Mrz 2017)

Ja. Es gibt Programme, die vor dem Start ein Adminpasswort benötigen. Der ganze Bildschirm rückt in den Hintergrund und es öffnet sich ein Dialogfenster, in dem man den Nutzer einmalig auswählt und dann beliebig oft das Passwort eingeben kann.


----------



## mrBrown (2. Mrz 2017)

Dann probier einfach aus, wie oft du was falsches eingeben kannst^^

Ich würde aber denken, dass da generell verhindert wird, das irgendein Java-Programm da was eintippt...


----------



## Guenter123987 (2. Mrz 2017)

Ja, das muss ich auch noch austesten. Wobei ein Limit an falschen Eingaben überflüssig wäre. Ich könnte das Fenster ja einfach nochmal öffnen. Aber dass das verhindert wird, kann sein. Glaubs aber auch nicht, weil Java arbeitet ja via Robot mit lowest-Level-Input. Der unterscheidet sich eigentlich nicht mehr von Nutzerinput, so wie das aussah.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Wobei ein Limit an falschen Eingaben überflüssig wäre. Ich könnte das Fenster ja einfach nochmal öffnen.


Die, die das entwickelt haben, werden schau genug gewesen sein, daran zu denken  (falsch du Sperren wegen Fehlversuchen meinst)


----------



## Guenter123987 (2. Mrz 2017)

Das wird sich herausstellen. Ich schreibe mal zuerst eine Anwendung, die immer den gleichen falschen String eingibt und dabei zählt. Wenn ich fertig bin, poste ich, was dabei rauskam.


----------



## Meniskusschaden (2. Mrz 2017)

mrBrown hat gesagt.:


> Ich würde aber denken, dass da generell verhindert wird, das irgendein Java-Programm da was eintippt...


Ich glaube auch nicht, dass man da einfach so reinschreiben kann. Ich spekuliere mal, dass der Robot letztendlich das jeweilige Betriebssystem-API nutzt, so dass es unter Kontrolle des Betriebssystems geschieht. Kann mir nicht vorstellen, dass Windows im Kennwort-Dialog etwas akzeptiert, dass nicht direkt von der physikalischen Tastatur kommt. Wahrscheinlich müsste man dazu den Tastaturtreiber manipulieren. Ist aber nur geraten. Ich weiß nicht, ob es sich wirklich so verhält.

Es ist vermutlich einfacher, zu versuchen auf eine Netzwerk-Ressource zuzugreifen. Dann kann man sich den KeyLogger und diese seltsame Geschichte mit den Pixel-Farben sparen, deren Sinn sich mir noch nicht erschlossen hat. Darüber wird man aber auch kaum in einer akzeptablen Zeit auf genug Versuche kommen.


----------



## Meniskusschaden (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Das ist langweilig, die sich anzulesen, ohne ein Ziel vor Augen zu haben. Und ein Hobby sollte niemals langweilig sein.


Da ist sicher was dran, aber ich würde mir lieber ein Ziel suchen, dass in absehbarer Zeit Erfolgserlebnisse verspricht.


----------



## Guenter123987 (2. Mrz 2017)

Meniskusschaden hat gesagt.:


> Dann kann man sich den KeyLogger und diese seltsame Geschichte mit den Pixel-Farben sparen, deren Sinn sich mir noch nicht erschlossen hat.


Wenn sich die Pixelfarbe ändert, bin ich nicht mehr im Eingabefenster. Dann soll das Programm sich schließen.


----------



## Guenter123987 (2. Mrz 2017)

Ich hab' ja schon ein Fenster geschrieben, das 2 Integer multipliziert. Ein Erfolgserlebnis ist das aber nicht. Man kann es für nichts verwenden.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Wenn sich die Pixelfarbe ändert, bin ich nicht mehr im Eingabefenster. Dann soll das Programm sich schließen.



Die ändert sich sowohl bei Erfolg, Abbruch als auch Fehlversuch.


----------



## mrBrown (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Ich hab' ja schon ein Fenster geschrieben, das 2 Integer multipliziert. Ein Erfolgserlebnis ist das aber nicht. Man kann es für nichts verwenden.


das ist in etwa so wie als Auto-Mechatroniker: "ich habe schon mal eine Mutter auf eine Schraube gedreht, aber damit kann man ja nichts anfange, ich baue jetzt ein Spaceshuttle"


----------



## Guenter123987 (2. Mrz 2017)

Bei Erfolg und Abbruch soll das Programm sich schließen. Dann kann es seiner Aufgabe ja nicht mehr nachkommen. Bei Fehlversuch ändert sich die Farbe nur kurz. Das regel' ich mit einem Timer.


----------



## Guenter123987 (2. Mrz 2017)

Ein solcher primitiver Hack ist kein Spaceshuttle. Das ist eine Holzkeule.


----------



## Guenter123987 (2. Mrz 2017)

Ich verstehe nicht, warum diese kleine Testklasse nicht funktioniert.
	
	
	
	





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

public class Main {
   public static void main() throws AWTException {
       Robot robot = new Robot();
       while(true) {
           robot.keyPress(KeyEvent.VK_A);
           robot.keyRelease(KeyEvent.VK_A);
       }
   }
}
```


----------



## mrBrown (2. Mrz 2017)

Weil dir dir Grundlagen fehlen.

Die Main muss als `public static void main(String[] args)` deklariert sein.


----------



## Guenter123987 (2. Mrz 2017)

Ok, danke. Das wusste ich schon, ist mir aber in der Eile nicht eingefallen.


----------



## Guenter123987 (2. Mrz 2017)

Scheiße. Jetzt hat's funktioniert. Der Robot hat ja nen ordentlichen Speed drauf, da musste ich den großen Schalter drücken.


----------



## Guenter123987 (2. Mrz 2017)

Ok, der Versuch war für den Eimer. Die Zeichen werden schlicht und einfach nicht eingetippt. Von mir aus kann der Post hier geschlossen werden.


----------



## Meniskusschaden (2. Mrz 2017)

Guenter123987 hat gesagt.:


> Die Zeichen werden schlicht und einfach nicht eingetippt.


Allgemein wird man es schon hinbekommen, Zeichen in ein anders Fenster einzugeben. Das hatten wir hier vor einiger Zeit schon mal. Nur beim Kennwort-Dialog wird's eben knifflig.


----------



## Guenter123987 (2. Mrz 2017)

Um den Kennwortdialog geht's mir halt. Ich wende mich glaube ich mal wieder meinem unity Spiel zu.


----------

