Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] classe AWT Robot keyPress(int keyCode)

    Ho creato un oggetto Comando che memorizza la Stringa del comando ed i tasti da premere con la classe robot
    codice:
    public Comando(String comando, int tasto1, int tasto2) {
            this.tasti = new int[2];
            this.comando = comando;
            this.tasti[0] = tasto1;
            this.tasti[1] = tasto2;
        }
    e lo costruisco tramite:
    codice:
    comando[0] = new Comando("Play/Pausa", KeyEvent.CTRL_MASK, KeyEvent.VK_P);
    Quando il client manda il comando esegue il seguente metodo

    codice:
    private void keyPress(int tasti[]) {
    
            switch (tasti.length) {
                case 1://1 tasto
                    robot.keyPress(tasti[0]);
                    robot.delay(35);
                    robot.keyRelease(tasti[0]);
                    break;
                case 2://2 tasti
                    robot.keyPress(tasti[0]);
                    robot.keyPress(tasti[1]);
                    robot.delay(35);
                    robot.keyRelease(tasti[0]);
                    robot.keyRelease(tasti[1]);
                    break;
                case 3://3 tasti
                    robot.keyPress(tasti[0]);
                    robot.keyPress(tasti[1]);
                    robot.keyPress(tasti[2]);
                    robot.delay(35);
                    robot.keyRelease(tasti[0]);
                    robot.keyRelease(tasti[1]);
                    robot.keyRelease(tasti[2]);
                    break;
            }
        }
    ma mi dà un IllegalArgumentException: Invalid Key Code.. perchè? eppure è lo stesso intero..
    Write Once, Run Everywhere.
    Write Less, Do More.

  2. #2
    capito il problema..
    vuole solo paramentri KeyEvent.VK....
    Write Once, Run Everywhere.
    Write Less, Do More.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da NøName_121
    capito il problema..
    vuole solo paramentri KeyEvent.VK....
    Appunto ... quindi es. VK_CONTROL, VK_ALT ma non CTRL_MASK.

    E quello switch di tasti.length non servirebbe nemmeno. Basta un for per fare i keyPress(), poi il delay() poi un for per fare i keyRelease().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Originariamente inviato da andbin
    Appunto ... quindi es. VK_CONTROL, VK_ALT ma non CTRL_MASK.

    E quello switch di tasti.length non servirebbe nemmeno. Basta un for per fare i keyPress(), poi il delay() poi un for per fare i keyRelease().
    hai ragione.. cambio il metodo, grazie
    non c'avevo pensato

    eccolo, funziona:

    codice:
     private void keyPress(int tasti[]) {
            for(int i=0; i<tasti.length;i++){
                //for press
                robot.keyPress(tasti[i]);
            }
            //ritardo
            robot.delay(35);
            for(int i=0; i<tasti.length;i++){
                //for release
                robot.keyRelease(tasti[i]);
            }
        }
    Write Once, Run Everywhere.
    Write Less, Do More.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se proprio volessimo fare i fini fini, sarebbe più appropriato eseguire i release al contrario, l'ultimo premuto rilasciato per primo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    dici? bhè ci vuol poco ^^

    un altro problemino.. con la classe robot vorrei memorizzare una parte di desktop per poi inviarla al cellulare e disegnarla.. è possibile? come?

    ora utilizzo una connessione di questo tipo

    codice:
    public void run() {
                try {
                    conn = (StreamConnection) Connector.open("btspp://" + connectionURL);
                    connected = true;
                    output = conn.openDataOutputStream();
                    input = conn.openDataInputStream();
                    output.writeUTF("connected "+LocalDevice.getLocalDevice().getFriendlyName());
                    output.flush();
                } catch (Exception e) {
                }
            }
    diretta, prendo i canali di input e output e simulo una porta seriale praticamente..
    Write Once, Run Everywhere.
    Write Less, Do More.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da NøName_121
    con la classe robot vorrei memorizzare una parte di desktop per poi inviarla al cellulare e disegnarla.. è possibile? come?
    In questo mio post avevo scritto un semplice esempio per fare lo "screenshot" dello schermo e salvarlo su file. Il funzionamento è sicuramente chiaro e comprensibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.