Tastendruck simulieren

Status
Nicht offen für weitere Antworten.
L

LoN_Nemesis

Gast
Hallo,

ich möchte gerne ein kleines Java Programm/Applet schreiben, welches ein anderes Programm "steuert". Ist dies überhaupt möglich? Also es geht darum, dass ich ein Spiel steuern möchte. Für den Anfang würde es mir schon reichen, alle x Sekunden die Taste K zu drücken.

Gibt es irgendwelche Denkanstösse? Wäre für jede Hilfe dankbar ;)
 
L

LoN_Nemesis

Gast
Vielen Dank, schau mir das mal an und probiere es aus ;) Danke für die schnelle Antwort ;)
 
L

LoN_Nemesis

Gast
Vielen Dank, also das war alles sehr hilfreich. Ich habe nun mit der Robot Klasse ein wenig rumgespielt und sie tut genau das was ich möchte, perfekt! Aber nun habe ich ein anderes Problem :(

Und zwar möchte ein kleines GUI anbieten, in dem man die Zeit zwischen den Tastendrücken einstellen kann und ausserdem ein Start/Stop Knopf zum Starten und Anhalten des Programmes. Nun ist mein Problem folgendes: Ich weiss nicht wo ich die Robot Funktionalität unterbringen soll. Wenn ich in der Mainmethode erst das UI erstelle und dann eine Endlosschleife mache, dann steigt die CPU Auslastung auf 50% :( Ausserdem weiss ich nicht, ob dann noch so Sachen wie ActionListener funktionieren, wenn man nur in dieser Endlosschleife feststeckt? Irgendwie mit Threads wohl, nur wie? Verstehe leider die Beispiele die ich mir angesehen habe nicht richtig.

Weiss jemand Rat?
 

André Uhres

Top Contributor
Code:
/* 
* Game_Robot.java 
*/ 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class Game_Robot extends JFrame implements ActionListener{ 
    public Game_Robot() { 
        super("Game Robot"); 
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
        setAlwaysOnTop(true); 
        try { 
            robot = new Robot(); 
        } catch (AWTException ex) { 
            ex.printStackTrace(); 
        } 
        mainPanel = new JPanel(); 
        delayF = new JTextField("500"); 
        startB = new JToggleButton("Start"); 
        delayF.setPreferredSize(new Dimension(100, 20)); 
        mainPanel.add(delayF); 
        startB.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent evt) { 
                startBActionPerformed(evt); 
            } 
        }); 
        mainPanel.add(startB); 
        getContentPane().add(mainPanel, BorderLayout.CENTER); 
        pack(); 
    } 
    private void startBActionPerformed(ActionEvent evt) { 
        if(startB.isSelected()){ 
            //Die Alt-Tab Tastenkombination gibt den Focus wieder an den zu kontrollierenden Prozess: 
            robot.keyPress(KeyEvent.VK_ALT); 
            robot.keyPress(KeyEvent.VK_TAB); 
            robot.keyRelease(KeyEvent.VK_TAB); 
            robot.keyRelease(KeyEvent.VK_ALT); 

            timer = new Timer(Integer.parseInt(delayF.getText().trim()), this); 
            timer.start();//Timer startet. Alle "delay" Millisekunden, wird actionPerformed aufgerufen 
            delayF.setFocusable(false);  //Textfeld nicht fokusierbar, sonst würde es mit k's gefüllt wenn man drauf geht 
        }else{ 
            timer.stop();    //Timer stoppt
            delayF.setFocusable(true);    //Textfeld wieder fokusierbar um den delay ändern zu können 
        } 
    } 
    public void actionPerformed(ActionEvent e) { 
        //Alle "delay" Millisekunden, wird actionPerformed aufgerufen 
        //und die K-Taste gedrückt:
        robot.keyPress(KeyEvent.VK_K); 
        robot.keyRelease(KeyEvent.VK_K); 
    } 
    public static void main(String args[]) {new Game_Robot().setVisible(true);} 
    private JPanel mainPanel; 
    private JTextField delayF; 
    private JToggleButton startB; 
    private Timer timer; 
    private Robot robot; 
}
 
L

LoN_Nemesis

Gast
Wow, es funktioniert ;) Nur wenn ich ehrlich bin verstehe ich nicht warum :(

Du startest einen Timer, ok, aber weiter? Wird jedesmal wenn der Timer "tickt" die Methode ActionPerformed aufgerufen? Und warum machst du das Fenster nicht fokusierbar?

Unendlichen Dank jedenfalls ;)
 

André Uhres

Top Contributor
Sobald "Start" gedrückt wird gibt die "Alt-Tab" Tastenkombination den Focus wieder an den
zu kontrollierenden Prozess.
Der Timer startet. Alle "delay" Millisekunden, wird actionPerformed aufgerufen
wo die K-Taste gedrückt wird.
Das Textfeld ist jetzt nicht mehr fokusierbar, sonst würde es mit k's gefüllt wenn man drauf geht.
Sobald "Start" wieder losgelassen wird, stoppt der Timer und das Textfeld wird wieder
fokusierbar um den "delay" ändern zu können.

PS: Man kann natürlich auch einen FocusListener an das Textfeld hängen und bei focusGained
den Timer stoppen und den Button setSelected(false) setzen. Dann kann das Textfeld fokusierbar bleiben.
Das Ganze ist dann etwas bequemer zu bedienen:
Code:
       delayF.addFocusListener(new FocusListener(){
            public void focusGained(FocusEvent e) {
                if(timer!=null && timer.isRunning()){
                    timer.stop();
                    startB.setSelected(false);
                }
            }
            public void focusLost(FocusEvent e) {
            }
        });
//Die beiden "delayF.setFocusable(..)"-Anweisungen entfernen !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Tastendruck simulieren Allgemeine Java-Themen 3
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
A Tastendruck an Firefox senden Allgemeine Java-Themen 7
V Tastendruck für UTF-8 Zeichen emulieren Allgemeine Java-Themen 4
G Button-Registrierung beim ActionListener erst NACH Tastendruck Allgemeine Java-Themen 2
U AWT simulierter Tastendruck auf Virtual Server Allgemeine Java-Themen 7
R Programm per Tastendruck beenden Allgemeine Java-Themen 19
E programm im background tastendruck abfangen Allgemeine Java-Themen 4
K Programm durch Tastendruck beenden Allgemeine Java-Themen 4
G Task 1 sek nach letztem Tastendruck ausführen Allgemeine Java-Themen 2
OnDemand API simulieren Allgemeine Java-Themen 1
OnDemand Drucker simulieren auf Mac Allgemeine Java-Themen 5
N Tastendrücke Simulieren Allgemeine Java-Themen 7
C Klasse mit Mockito simulieren Allgemeine Java-Themen 9
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
SeppiHinteregger Maus realistisch simulieren Allgemeine Java-Themen 5
M Mikrofon Input simulieren Allgemeine Java-Themen 1
W keypress simulieren Allgemeine Java-Themen 6
O Bot, Mausklicke simulieren Allgemeine Java-Themen 19
C HTTP OnClick auf Website in Java simulieren Allgemeine Java-Themen 2
aze Mockito:Instanzmethode mit any simulieren Allgemeine Java-Themen 4
Mephist0 Mailserver simulieren mit EasyMock 1.2 Allgemeine Java-Themen 7
S Strg+V ohne Fokus simulieren! Allgemeine Java-Themen 12
L Mausklick simulieren Allgemeine Java-Themen 4
M Mouse Klicks simulieren? Allgemeine Java-Themen 10
T JComboBox simulieren Allgemeine Java-Themen 9
U langsamen Prozessor simulieren Allgemeine Java-Themen 4
S Dateisystem unter Java simulieren Allgemeine Java-Themen 17
G Enter-Taste simulieren Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben