Java – Menggunakan Class Robot

Repost dari artikel saya di PC Mild 24/2010

Java memiliki sebuah class yang dapat mengontrol jalannya keyboard dan mouse. Dengan class ini, event mouse dan keyboard dapat di-generate melalui program. Pada contoh kali ini akan dijelaskan bagaimana class tersebut bisa mengetik layaknya keyboard, menggerakkan mouse, serta mengambil screenshot layar.

Caranya adalah menggunakan class Robot. Class ini terletak dalam package java.awt, yang mayoritas digunakan untuk keperluan aplikasi berbasis grafis. Tapi pada dasarnya class ini digunakan untuk meng-generate event native input untuk keperluan otomasi tes, demo yang berjalan sendiri, dan aplikasi lain yang membutuhkan kontrol dari mouse dan keyboard.

Berikut ini langkah-langkah contoh memanfaatkan class Robot.

  1. Buat object dari class Robot. Jangan lupa untuk menyertakan statement import package-nya. Karena beberapa platform membutuhkan hak akses khusus untuk mengakses low-level input, jika platform tersebut tidak memperbolehkan kontrol terhadap input, maka AWTException akan dijalankan ketika meng-construct objek Robot. Maka dari itu, pembuatan object ini harus dalam blok try-catch yang akan menangkap exception tersebut.
    import java.awt.AWTException;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.event.KeyEvent;
    import java.awt.image.BufferedImage;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel; 
    
    public class MyRobot {
    
      public static void main(String[] args) {
        try {
          Robot robo = new Robot();
        } catch (AWTException ex) {}
      }
    }
    
  2. Robot bisa membuat screen capture dengan method-nya createScreenCapture(). Method ini membutuhkan parameter Rectangle sebagai area yang akan di-capture, kemudian mengembalikan nilai berupa object BufferedImage yang bisa dimanipulasi. Untuk melihat hasil dari screen capture, Anda bisa menggambarnya pada sebuah canvas atau JPanel menggunakan class Graphics.
    class Canvas extends JPanel {
    
      BufferedImage capture;
    
      public Canvas(BufferedImage capture) {
        this.capture = capture;
        this.setPreferredSize(new Dimension(capture.getWidth(), capture.getHeight()));
      }
    
      @Override
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(capture, 0, 0, null);
        g.dispose();
      }
    }
    
  3. Di bawah baris inisiasi object robot, Anda tinggal memanggil perintah screen capture dan memasukkannya ke canvas yang telah dibuat. Jika Anda ingin menyimpan gambar tersebut ke dalam file, Anda bisa menambahkan cara lainnya sendiri. Sehingga untuk method main, akan berubah menjadi demikian.
      public static void main(String[] args) {
        BufferedImage capture = null;
        int width = 400;
        int height = 400;
        try {
          Robot robo = new Robot();
          // delay untuk mengatur layar
          robo.delay(1000);
          // mulai capture
          capture = robo.createScreenCapture(new Rectangle(100, 100, width, height));
          if (capture != null) {
            Canvas panel = new Canvas(capture);
            JFrame frame = new JFrame("Test Capture");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(panel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
          }
        } catch (AWTException ex) {}
      }

    Hasil screen capture dari si Robot

  4. Selain itu, Robot bisa mengontrol mouse dan keyboard seperti layaknya pengguna. Beberapa method yang bisa digunakan adalah keyPress(), keyRelease(), mouseMove(), mousePress(), dan sebagainya. Untuk lebih lengkapnya Anda bisa membaca di dokumentasi API di websitenya http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Robot.html. Berikut contoh cara menggunakannya. Letakkan baris ini di bawah inisiasi object robot seperti sebelumnya.
      public static void main(String[] args) {
        try {
          Robot robo = new Robot();
    
          // delay untuk berpindah jendela
          robo.delay(1000);
          // mengetikkan huruf
          robo.keyPress(KeyEvent.VK_H);
          robo.keyRelease(KeyEvent.VK_H);
          robo.keyPress(KeyEvent.VK_A);
          robo.keyRelease(KeyEvent.VK_A);
          robo.keyPress(KeyEvent.VK_Q);
          robo.keyRelease(KeyEvent.VK_Q);
          robo.keyPress(KeyEvent.VK_Q);
          robo.keyRelease(KeyEvent.VK_Q);
          robo.keyPress(KeyEvent.VK_I);
          robo.keyRelease(KeyEvent.VK_I);
          // menggerakkan mouse
          robo.mouseMove(100, 100);
        } catch (AWTException ex) {}
      }

    Hasil ketikan oleh Robot

  5. Anda akan mendapati komputer Anda mengetikkan sesuatu, kemudian kursor mouse Anda akan berpindah ke koordinat 100, 100. Class Robot ini juga bisa digunakan untuk mengambil warna dari suatu koordinat pixel tertentu pada layar dengan method getPixelColor().
          Color c = robo.getPixelColor(1, 1);
          JOptionPane.showMessageDialog(null, c.toString(),
                  "Warna pixel", JOptionPane.INFORMATION_MESSAGE);

    Warna yang didapat oleh Robot

  6. Untuk menyimpan gambar hasil capture Robot, Anda bisa menggunakan class ImageIO. Class ini terletak pada package javax.imageio, sehingga Anda harus mendeklarasikan:
    import javax.imageio.ImageIO;

    di bagian statement import. ImageIO berisi static method yang berfungsi untuk input output file. Karena berhubungan dengan masalah input output, maka ImageIO mengeluarkan IOException setiap methodnya.
    Untuk menyimpan gambar dalam sebuah file, Anda bisa menggunakan method write(). Method write menerima 3 macam parameter output, yaitu File, ImageOutputStream, dan OutputStream. Berikut ini cara penggunaannya dengan memakai parameter File pada sistem operasi Windows.

          robo.delay(1000);
          // mulai capture
          capture = robo.createScreenCapture(new Rectangle(100, 100, width, height));
          if (capture != null) {
            try {
              // tulis gambar dalam file
              ImageIO.write(capture, "png", new File("D:\\gambar.png"));
            } catch (IOException ex) {
            }
          }
    

    Parameter pertama merupakan BufferedImage hasil capture Robot. Parameter kedua merupakan format gambar yang akan disimpan. Anda bisa mengisikannya dengan png, jpg, bmp, dan sebagainya. Sedangkan parameter ketiga adalah object File untuk output yang dibuat berdasarkan path file. Sesuaikan path dengan kondisi komputer Anda. Perhatikan bahwa pada Windows, tanda backslash harus diketik dua kali karena merupakan escape character.

Selamat mencoba..!!

Download source code secara keseluruhanArtikel ini telah dipublikasikan di media cetak tabloid PC Mild edisi 24 tahun 2010 lalu.

4 Comments

Leave a Comment.