Muitas vezes, esperamos implementar testes automáticos, funções de demonstração automática ou outros aplicativos de controle de mouse e teclado (como ajudar as pessoas a clicar em anúncios para obter lucros etc.). Para esse fim, desde o JDK1.3, ele nos forneceu um robô que gera eventos de entrada nativos - java.awt.robot.
Abaixo, apresentarei as funções e exemplos de aplicativos do Robot em detalhes:
1. Principais funções do robô
1. BufferImage CreateScreencapture (Retângulo ScreenRect)
NOTA: Este método fornece uma função semelhante à tecla PrintScreen no teclado, copiando os pixels da tela na área retangular especificada para gerar um bufferImage.
Aplicação: Podemos usar esse método em um programa gráfico ou usá -lo para realizar a transmissão de tela remota, que pode ser transformada em um programa de monitoramento de computador remoto etc.
2. Atraso vazio (int ms)
Descrição: Usado para dormir o programa atual (thread) para vários milissegundos (MS).
Aplicação: pode ser usado para controlar o atraso do programa. Isso geralmente é necessário porque você definitivamente terá um atraso nas duas operações de intervalo.
3. color getpixelcolor (int x, int y)
Descrição: Obtenha o valor de cor da posição de pixel das coordenadas de tela fornecidas.
Aplicação: basta pegar o valor RGB da cor, para que eu não diga muito.
4. Void KeyPress (INT KeyCode)
Void Keyrelease (Int KeyCode)
NOTA: Você pode ver as funções desses dois métodos rapidamente. As ações de imprensa e elevação usadas para gerar a tecla especificada são equivalentes à função keyb_event da API Win32, ou seja, para simular operações de teclado. Os valores específicos do código de chave são keyevent.vk_c, keyevent.vk_d, keyevent.vk_control, etc. Ao aplicar o aplicativo específico, você o conhecerá observando o prompt do eclipse.
Aplicação: pode ser usado para demonstração automática, teste, etc. de programas, o que é muito útil.
5. Void Mousemove (int x, int y)
Descrição: Mova o cursor do mouse para as coordenadas de tela especificadas.
Aplicação: pode ser usado para demonstração automática, teste etc. do programa e é indispensável para uso com outros métodos.
6. Void Mousepress (botões int)
Void Mouserelease (botões int)
Void Mouse Wheel (int Wheelamt)
Nota: Os três métodos acima geram o movimento da roda de pressão, elevação e rolagem do botão especificado do mouse, que simula a operação do mouse. Os valores de botões específicos incluem inputevent.Button1_Mask (botão esquerdo do mouse), inputevent.Button3_Mask (botão direito do mouse, se for um mouse duplo, use inputevent.button2_mask).
Aplicação: também pode ser usado para demonstração automática, teste etc. do programa. É muito importante usá -lo em conjunto com outros métodos.
2. Exemplos de aplicação
Escrevi dois exemplos de aplicativos relativamente pequenos, um é um teste de simulação simples e o outro é clicar automaticamente em anúncios para obter lucros. A seguir são demonstrações.
Primeiro escreva alguns métodos comuns comuns.java
pacote com.alexa; importar java.awt.rectangle; importar java.awt.robot; importar java.awt.toolkit; importar java.awt.event.inputevent; importar java.awt.event.keyevent; importar java.awt.image.bufferiMage; importar javax.swing.icon; importar javax.swing.imageicon; /** * @Descruction Robot Ajuda classe Para implementar funções básicas * @Author Alexia * @Date 2013/5/18 * */public class Common {/** * Mouse Click (Clique esquerdo) e, se você deseja o time * time * @thats), você chama de time * * * * * @param @param x * X * xcick * @param y * y * coorden * clicklmouse (robot r, int x, int y, int deound) {r.mouseMove (x, y); R.MousePrimor (inputevent.Button1_Mask); R.Delay (10); R.MouseRelease (inputevent.Button1_Mask); R.Delay (atraso); } / ** * Clique com o botão direito do mouse no mouse e, se você quiser clicar duas vezes, ligue continuamente * * @param r * @param x * x Posição de coordenada * @param y * y * Posição de coordenada * @param atraso * tempo de atraso após esta operação * / public static void clickrmouse (robot r, int x, int y); R.MousePrimor (inputevent.Button3_Mask); R.Delay (10); r.MouseRelease (inputeEnt.Button3_Mask); R.Delay (atraso); } / ** * Entrada do teclado (apenas um caractere pode ser inserido por vez) * * @param r * @param ks * Matriz de caracteres inseridos pelo teclado * @param atraso * tempo de atraso após entrar em uma chave * / public static void Presskeys (robot r, int [] ks, int) {para (int i = 0; R.Delay (10); R.Keyrelease (KS [i]); R.Delay (atraso); }} / ** * cópia * * @param r * @throws interruptedException * / void docypy (robot r) lança interruptedException {thread.sleep (3000); R.SetAutodelay (200); r.keypress (keyevent.vk_control); r.keypress (keyEvent.vk_c); r.KeyReLease (keyevent.vk_control); r.KeyReLease (keyevent.vk_c); } / ** * paste * * @param r * @throws interruptedException * / void doparse (robot r) lança interruptedException {r.setAutodelay (500); Thread.sleep (2000); R.MouseMove (300, 300); R.MousePrimor (inputevent.Button1_Mask); R.MouseRelease (inputevent.Button1_Mask); r.keypress (keyevent.vk_control); r.keypress (keyEvent.vk_v); r.KeyReLease (keyevent.vk_control); r.KeyReLease (keyEvent.vk_v); } / ** * Capture a tela cheia moo * * @param r * @return * / Ícone público capturefullScreen (robot r) {bufferedImage fullScreenImage = r.CreateScreencapture (novo retângulo (Toolkit.getDefaultToolkit (). GetScreenize ()); Icon imageicon = novo imageicon (fullcreenImage); Ícone de retorno; } / ** * Capture uma área ortopédica da tela * * @param r * @param x * x Posição de coordenada * @param y * y Posição de coordenada * @param largura * largura do retângulo * @param altura * altura do retongn. BufferImage FullScreenImage = R.CreatesCreencapture (novo retângulo (largura, altura)); Icon imageicon = novo imageicon (fullcreenImage); Ícone de retorno; }}Antes do exemplo, preste atenção em como determinar a posição de coordenadas da tela. Eu baixei um gadget, o que é muito conveniente de usar. É recomendável que você o use.
1. Teste simulado simples
pacote com.alexia; importar java.awt.*; importar java.awt.event.*; importar javax.swing.JOptionPane; classe pública SimpleTest {public static void main (string [] args) lança exceção {Final Robot RB = new Robot (); novo thread () {public void run () {rb.delay (2000); // simular o retorno do carro rb.keypress (keyevent.vk_enter); rb.keyRelease (keyevent.vk_enter); } }.começar(); rb.delay (3000); // Defina a posição aproximada do menu Iniciar int x = 40; int y = ferramentakit.getDefaultToolkit (). getScreensize (). altura - 10; // mova o mouse para o menu Iniciar, RB.MouseMove (x, y); rb.delay (500); // Clique no menu Iniciar Common.ClicklMouse (RB, X, Y, 500); rb.delay (1000); // Execute o comando cmd cmd enter int [] ks = {keyevent.vk_c, keyevent.vk_m, keyevent.vk_d, keyevent.vk_enter,}; Common.Presskeys (RB, KS, 500); rb.MouSeMove (400, 400); rb.delay (500); // Execute o comando dir Dir enter ks = new int [] {keyevent.vk_d, keyevent.vk_i, keyevent.vk_r, keyevent.vk_enter}; Common.Presskeys (RB, KS, 500); rb.delay (1000); // Execute o comando cls cls enter ks = new int [] {keyevent.vk_c, keyevent.vk_l, keyevent.vk_s, keyevent.vk_enter}; Common.Presskeys (RB, KS, 500); rb.delay (1000); // Execute o comando de saída Exit ENTER KS = new int [] {keyevent.vk_e, keyevent.vk_x, keyevent.vk_i, keyevent.vk_t, keyevent.vk_enter}; Common.Presskeys (RB, KS, 500); rb.delay (1000); // Clique com o botão direito do mouse para testar x = Toolkit.getDefaultToolkit (). GetScreensize (). Largura - 50; Common.Clickrmouse (RB, X, Y, 500); novo thread () {public void run () {rb.delay (1000); // Digite rb.keypress (keyevent.vk_enter); rb.keyRelease (keyevent.vk_enter); } }.começar(); JoptionPane.showMessagedialog (null, "Demo acabou!"); }} 2. Clique na publicidade da NetEase para obter um lucro escasso
pacote com.alexia; importar java.awt.awtexception; importar java.awt.desktop; importar java.awt.robot; importar java.awt.event.keyevent; importar java.io.ioException; importar java.net.uri; importar java.util.random; classe pública Autoclickads {private robot robot; parada booleana volátil privada = false; / ** Cria uma nova instância de main*/ public AutoClickads () {try {robot = new Robot (); } catch (awtexception ex) {ex.printStackTrace (); }} public void init () {robot.delay (3000); System.out.println ("clique em anúncios iniciantes"); // Abra o URL especificado em uma nova janela do navegador ou em uma janela do navegador existente (JDK 1.6 ou acima) Desktop Desktop = Desktop.getDesktop (); if (desktop.isdesktopsupported () && desktop.issupported (Desktop.action.browse)) {uri uri = uri.create ("http://lanxuezaipiao.blog.163.com/"); tente {desktop.browse (URI); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }} tente {run (); } catch (interruptedException e) {// TODO BLOCO DE CATCH AUTOGERATIDO E.PRINTSTACKTRACE (); } parar(); System.out.println ("clique em anúncios parados"); } public void run () lança interruptedException {int conting = 1; while (! Stop) {robot.delay (8000); int x = 576; int y = 567; Aleatório r = novo aleatório (); Common.ClicklMouse (Robot, X, Y, 3000); // Digite a seta para baixo para realizar a página virgem int [] ks = {keyevent.vk_down}; for (int i = 0; i <10; i ++) Common.presskeys (robot, ks, 0); int[][] a = { { 500, 103 }, { 500, 163 }, { 500, 223 }, { 500, 283 }, { 500, 343 }, { 500, 403 }, { 500, 463 }, { 500, 523 }, { 500, 583 }, { 500, 643 }, }; int b = r.nextint (5); x = a [b] [0]; y = a [b] [1]; Common.ClicklMouse (Robot, X, Y, 1000); // Digite a seta para baixo para obter a volta da página para (int i = 0; i <500; i ++) Common.presskeys (robot, ks, 0); // Digite a seta para baixo para alcançar a página vir [] kups = {keyevent.vk_up}; for (int i = 0; i <3; i ++) Common.presskeys (robot, kups, 0); x = 900; y = 210; Common.ClicklMouse (Robot, X, Y, 3000); x = 1090; y = 15; Common.ClicklMouse (Robot, X, Y, 3000); x = 900; y = 135; Common.ClicklMouse (Robot, X, Y, 3000); System.out.println ("Clicou com sucesso" + contagem + "anúncios!"); }} public sincronizado void stop () {stop = true; } / ** * * @param args os argumentos da linha de comando * * @THOWS INTERUPEDEXCECCECTION * / public static void main (string [] args) lança interruptedException {AutoClickads mc = new AutoClickads (); mc.init (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.