Wie funktioniert die Klasse Robot

K

KlasseRobot

Gast
Hey,
hab mal eine Frage. Hab mir die letzten Tag ein kleines Macro tool geschrieben. Bei Sachen wie Word funktioniert es auch recht gut, nur bei Full-Screen Anwendungen funktioniert das Tool nicht mehr. Hat das vielleicht damit zu tun, dass es nicht mehr im Vordergrund steht? Gibt es da vielleicht eine Lösung für? Ich denke nicht das in meiner Methode ein Fehler ist, man kann aber nie wissen:


Java:
import java.awt.AWTException;
import java.awt.Robot;

public class TastenSenden {

	private Robot robot;

	public TastenSenden() {
		try {
			robot = new Robot();
		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
        // Das int Array behinhaltet die verschiedenen Keycodes der einzelnen Tasten

	public void pressKeys(int[] keys, int sleep) {

		for (int i = 0; i < keys.length; i++) {
			robot.keyPress(keys[i]);

			robot.delay(sleep);
			
			
		}
		
	}

}

Wäre dankbar wenn ihr mir helfen könntet
 
S

Spacerat

Gast
Die Java-Anwendung muss auf jedenfall sichtbar und aktiv sein, sonst ignoriert die JVM alle Eingaben bzw. bekommt sie nicht übermittelt und anders rum.
 
K

KlasseRobot

Gast
Naja, das Problem mit dem Keylistener habe ich umgangen mit einem Globalen. Gibt da einige Opensource Projekte im Internet.

Also heißt das im Klartext das die Klasse Robot nur dann Keys sendet, wenn die anwendung selbst sichtbar ist?
 
K

KlasseRobot

Gast
Naja die logische Frage darauf wäre, wie ich die Java Anwendung aktiv halte obwohl ich ein Anwendung habe die den ganzen Screen beansprucht.
 

thE_29

Top Contributor
JFrame/JDialog.setAlwaysOnTop(true);


Aber, bei welchen Fullscreen Apps funktioniert was nicht? Die Robot-Klasse macht ja nur MouseMovements und Tastendrücke. Ob "darunter" (wo sich die Maus bewegt oder die Tasten hingeschickt werden) eine Java Anwendung ist oder was anderes, sollte komplett egal sein..
 
K

KlasseRobot

Gast
Naja. Ich hab 2 Macros gemacht. 1) Für ein Word Dokument in dem ich sehr oft die selbe Zahlenreihe verwenden muss und eins für ein Game, das den Chat öffnet und etwas hineinschreiben soll.

Beim Word dokument funktioniert das alles Problemlos, nur beim Game nicht. Das Programm besteht aus keinem Frame. Es ist einfach nur eine Endloschleife die Prüft ob ein bestimmter Key gedrückt worden ist und dann die entsprechende Robot Methode aufruft die ich schon weiter oben gepostet habe (natürlich gibt es eine beenden Taste etc.).
 
T

tröööt

Gast
wow ... ich bin mal wieder über die unfähigkeit ein problem zu erfassen und zu begriefen sowas von erstaunt das ich mir nur denke : und ihr wollte jemanden helfen ? ...


um es noch mal klar zu sagen : das problem von TO ist das Robot zwar so normal KeyEvents ans system feuert ... und es z.b. bei Word auch ankommt ... aber das es mit FULLSCREEN anwendungen nicht mehr geht ...

das hat hier NICHTS mit irgendwelchen listenern oder focus zu tun ... und selbst wenn : um global zu reagieren hat er bereits n native global listener ... hat er geschrieben ...


@TO
keyPress() alleine reicht nicht .. du musst die "taste auch wieder loslassen" : keyRelease()
 
K

KlasseRobot

Gast
Naja, tröööt du hast in deinem Post im großen und ganzen schon recht, jedoch muss man das nicht so "harsh" ausdrücken.

Aber irgendwie macht es keinen sinn wenn, es bei Fullscreen Apps nicht weg weil das Release fehlt oder?
 

AngryDeveloper

Bekanntes Mitglied
Auf Windows nutzt die Robot Klasse sun.awt.windows.WRobotPeer. Der native Code der dabei zugrunde liegt ist awt_Robot.cpp. Der lässt sich hier auch finden: Results : awt_Robot.cpp - Ohloh Code Search

Events werden über win32 Aufrufe realisiert. Es gibt viele Spiele die solche Calls ignorieren und direkt mit dem Treiber kommunizieren. Besonders bei MMOs (Bot Protection).
 
Zuletzt bearbeitet:
S

Spacerat

Gast
um es noch mal klar zu sagen : das problem von TO ist das Robot zwar so normal KeyEvents ans system feuert ... und es z.b. bei Word auch ankommt ... aber das es mit FULLSCREEN anwendungen nicht mehr geht ...

das hat hier NICHTS mit irgendwelchen listenern oder focus zu tun ... und selbst wenn : um global zu reagieren hat er bereits n native global listener ... hat er geschrieben ...
Und ob das was mit Events usw. zu tun hat...
Events werden über win32 Aufrufe realisiert. Es gibt viele Spiele die solche Calls ignorieren und direkt mit dem Treiber kommunizieren. Besonders bei MMOs (Bot Protection).
Es sind auch nicht die Spiele, die diese Calls ignorieren, sondern Prozess-Manager, welche der Fullscreen-Anwendung fast ihre gesammte Aufmerksamkeit schenken. Und gerade Eingabegeräte sind am meisten davon betroffen. Was denkt ihr wohl, wo ich diesen Text hinschreiben würde, wenn mich irgend ein Robot in ein Notepad-Fenster klickt? Also noch mal... die Anwendung muss aktiv und sichtbar sein. Damit eine Anwendung aktiv und sein kann, muss auf jeden Fall erst mal der Screen, auf welchem sie sich befindet aktiv sein. Sollte es heutzutage noch irgendwelche Ausnahmen geben, sind diese mit Sicherheit am BS (bzw. am Prozessmanager) vorbei entwickelt und Robot (bzw. Java) gehört nicht dazu.
 

AngryDeveloper

Bekanntes Mitglied
Es sind auch nicht die Spiele, die diese Calls ignorieren, sondern Prozess-Manager, welche der Fullscreen-Anwendung fast ihre gesammte Aufmerksamkeit schenken.
Schon klar, dass es idR. nicht direkt die Spiele sind. HackShield, GameGuard, XTrap usw.
Deren Hooks erkennen und verwerfen solche Events. Manche kicken einen sogar aus dem Spiel.
Wenn es kein geschütztes Spiel ist, ist unter Umständen immer noch DirectX dazwischen, welches auch direkt auf die Hardware Events reagiert und nicht auf die vom BS bereitgestellten. Da muss man dann wohl oder übel über low level API calls gehen.
Fullscreen ist hier also nicht zwingend das Problem.

Das die Anwendung den Fokus haben muss ist denke ich klar.
 
K

KlasseRobot

Gast
Hey,

danke schonmal für eure Antworten. Das das spiel besonders geschützt ist denke ich nicht (handelt sich um Freelancer (2000) und WC3 (auch recht alt).

Zum Thema Low level api hast du da ein genaueres Stichwort?
 

AngryDeveloper

Bekanntes Mitglied
Beide Spiele nutzen DirectX.

Low Level APIs musst du über Java mit JNA (oder JNI) aufrufen.
Denke das Ganze sprengt das Thema vielleicht ein wenig und die Verwendung von einem anderen Tool wäre vorzuziehen? Gibt ja fertige wie z.B. AutoIt.
 
K

KlasseRobot

Gast
Danke. AutoIt ist ja eine auf C++ basierende Scriptsprache. Habe mich damit auch schon beschäftigt nur ist die Quellcode umstellung enorm und an sich finde ich diese Sprache irgendwie hässlich.
Werde micht trotzdem mal darum bemühen.
 

thE_29

Top Contributor
Kommen die Tasten jetzt an oder nicht?

Weil wenn du auf Taste X wartest, das du dann Taste A-Z rausspamt, das wird mit Java Only nicht klappen, weil Java ja den Key nicht rausfetchen kann..

@kappesf: Er wird meine, es ist eine Scriptsprache mit C++ Syntax. So wie PHP :D
 
K

KlasseRobot

Gast
Was meinst du mit kommen die Tasten jetzt an?

Funktionieren tut es, jedoch nicht bei Anwendungen die den kompletten Screen (Spiele etc.) verwenden. Der Grund dafür hat AngryDev. auch schon gut erklärt, ergibt auch irgendwie Sinn.

Weil wenn du auf Taste X wartest, das du dann Taste A-Z rausspamt

Das funktioniert übrigends.
 

thE_29

Top Contributor
Zitat:
Weil wenn du auf Taste X wartest, das du dann Taste A-Z rausspamt
Das funktioniert übrigends.

Bei einer VollscreenApp?
Nachtrag: Gut, mit einem 3t Programm/Library wird das auch klappen..

Und bei der VollscreenApp: wartest du auch auf Tastendruck X um Tasten ans Programm zu senden? War das dein einziger Versuch?

Ansonsten bau einfach ein Thread.sleep() ein und leg dein Progamm für 10-30 secs schlafen.
Dann sagst du im Programm, dass nach den 10-30secs irgendwelche Tasten (eventuell chat öffnen, was schreiben, wieder enter, etc.) gedrückt werden sollen. AUTOMATISCH (nicht auf Tastendruck warten).

Jetzt startest du dein Java Programm und danach das Spiel und schau ob Eingaben ankommen oder nicht..

Wir müssen ja auch ausschließen, dass der globale Keylistener nicht etwa versagt..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methode in Klasse funktioniert nicht Java Basics - Anfänger-Themen 14
C Klasse funktioniert nicht Java Basics - Anfänger-Themen 2
D Methoden g.setColor funktioniert nicht bei Methodenaufruf in anderer Klasse Java Basics - Anfänger-Themen 1
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
J Oracle JDBC Driver funktioniert nur in einer Klasse Java Basics - Anfänger-Themen 2
X Extrahieren in Externe Klasse Funktioniert nicht Java Basics - Anfänger-Themen 6
J erstes Prog./Klasse - Konstruktur/Objekterstellung funktioniert nicht Java Basics - Anfänger-Themen 25
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
D Klassen add Methode funktioniert nicht. Java Basics - Anfänger-Themen 31
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
F Primzahlsuche Schleife funktioniert nicht, HILFE! Java Basics - Anfänger-Themen 8
M Methoden Arrays.deepequals() funktioniert nicht Java Basics - Anfänger-Themen 2
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
M Erste Schritte Importieren funktioniert nicht Java Basics - Anfänger-Themen 7
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
F FileCreation - PrintWriter funktioniert nicht... Java Basics - Anfänger-Themen 1
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Level Reset funktioniert nicht Java Basics - Anfänger-Themen 3
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben