Προς το περιεχόμενο

Πατάω κουμπί πληκτρολογίου στη Java


eirinikp

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια,

Γράφω ένα πρόγραμμα στη Java και θέλω να κάνω το εξής: Ψάχνω έναν τρόπο ώστε χωρίς να πατήσω κανένα κουμπί "χειροκίνητα", το πρόγραμμα από μόνο του να πατάει ένα κουμπί από το πληκτρολόγιο (οποιοδήποτε). Πώς γίνεται αυτό?

Ευχαριστώ πολύ!

Δημοσ.

Με ένα google search βρήκα το παρακάτω.

 

java.awt.Robot

This class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations.

 

Using the class to generate input events differs from posting events to the AWT event queue or AWT components in that the events are generated in the platform's native input queue. For example, Robot.mouseMove will actually move the mouse cursor instead of just generating mouse move events.

 

Note that some platforms require special privileges or extensions to access low-level input control. If the current platform configuration does not allow input control, an AWTException will be thrown when trying to construct Robot objects. For example, X-Window systems will throw the exception if the XTEST 2.2 standard extension is not supported (or not enabled) by the X server.

 

Applications that use Robot for purposes other than self-testing should handle these error conditions gracefully.

 

Από java-tips.org

>
try {
   Robot robot = new Robot();
   
   // Simulate a mouse click
   robot.mousePress(InputEvent.BUTTON1_MASK);
   robot.mouseRelease(InputEvent.BUTTON1_MASK);
   
   // Simulate a key press
   robot.keyPress(KeyEvent.VK_A);
   robot.keyRelease(KeyEvent.VK_A);
} catch (AWTException e) {
   e.printStackTrace();
}

 

PS. Τι μαθαίνει κανείς...

Δημοσ.

Ευχαριστώ πολύ.

PS. Τι μαθαίνει κανείς...

Αντιλαμβάνομαι την αγανάκτησή σου, επειδή νόμιζες ότι βαριόμουν να ψάξω στο Google, αλλά έψαξα. Απλά δεν είχα αρκετή τύχη...

 

Το θέμα είναι ότι το νόημα του να πατηθεί το κουμπί είναι να το καταλάβει ένα executable (το οποίο τρέχει από ένα Process) που έχει κάνει παύση, ώστε να γίνει resume. Όμως παρόλο που πατιέται το κουμπί, μάλλον το πρόγραμμα δεν το καταλαβαίνει.

Κάποια ιδέα βελτίωσης?

Δημοσ.

Όχι δεν ήταν αγανάκτηση. Για μένα το είπα πολύ απλά επειδή δε το είχα ακουστά.

 

Η τελευταία πρόταση μου θύμισε ένα άλλο post (μπορεί και στο jhug αν δε κάνω λάθος) Εσύ ήσουν? :)

 

Χωρίς να δούμε λίγο κώδικα είναι δύσκολο να καταλάβουμε τι μπορεί να πηγαίνει στραβά.

Δημοσ.

Η τελευταία πρόταση μου θύμισε ένα άλλο post. Εσύ ήσουν? :)

Πολύ πιθανόν... Βασικά μετά από πολλή... πολλή... πολλή μελέτη κατέληξα στο εξής συμπέρασμα: Το process που επιστρέφεται από την Runtime.exec("myexecutable.exe") δεν μπορεί να κάνει παύση το myexecutable.exe ούτε με wait ούτε με οποιαδήποτε άλλη εξυπνάδα.

Μια νέα ιδέα όμως γεννήθηκε μετά από τόση σκέψη: Να φτιάξω ένα δεύτερο executable σε C να μου κάνει τη δουλειά!:devil:

Τι λέτε κι εσείς??

Δημοσ.

Εδώ ήταν τελικά και ναι ήσουν εσύ :P

 

Τι ακριβώς θέλεις να κάνεις? Μήπως το έχεις πιάσει λάθος εξ 'αρχής?

Από το java.lang.Process πάντως

 

The methods that create processes may not work well for special processes on certain native platforms, such as native windowing processes, daemon processes, Win16/DOS processes on Microsoft Windows, or shell scripts.
Δημοσ.

Πόσο λάθος να το έχω πιάσει? Με το process δεν υπάρχει καμία ελπίδα. Καρατσεκαρισμένο... Από πού αλλού να το πιάσω δηλαδή μέσω Java? Πώς θα μπορούσε η Java να επέμβη στη μνήμη που απασχολεί κάποιο άσχετο πρόγραμμα? Μπορεί να το σκοτώσει, μπορεί να του πάρει τα outputs, τα errors, να ελέγξει αν τερματίστηκε ομαλά ή όχι, αλλά να επέμβει με τόση ακριβεία ώστε να κάνει παύση και επανεκκίνηση δεν μπορεί... Μόνο στα threads της το κάνει αυτό...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...