[RESOLVIDO] Apertar teclas sequencialmente

28 respostas Resolvido
LostSpirit

Opa alguém poderia me ajuda?
Não consegui achar nada sobre

Alguma maneira em um programa apertar teclas em sequencias em um determinado delay
ex:
q w e

( desculpa caso não seja permetido esse tipo de pergunta. )

28 Respostas

rodriguesabner

Cara, não entendi muito bem. Você quer que o programa digite por exemplo a palavra Olá Mundo “sozinho”?

LostSpirit

Sim tipo:
Ao abrir a instancia ele ficaria apertando
q soltava q, aperta w solta w, aperta e solta e
em sequencia sem delay .

rodriguesabner
Solucao aceita

Entendi, dá sim, vc pode usar a classe Robot.

Não sei se no JavaFX dá pra fazer uma classe Java com o public static void main (provavelmente sim) , mas tenta isso:

public static void main(String[] args) {
    try {
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_O);
        robot.keyPress(KeyEvent.VK_I);
        robot.keyPress(KeyEvent.VK_SPACE);
        robot.keyPress(KeyEvent.VK_L);
        robot.keyPress(KeyEvent.VK_O);
        robot.keyPress(KeyEvent.VK_S);
        robot.keyPress(KeyEvent.VK_T);
        robot.keyPress(KeyEvent.VK_S);
        robot.keyPress(KeyEvent.VK_P);
        robot.keyPress(KeyEvent.VK_I);
        robot.keyPress(KeyEvent.VK_R);
        robot.keyPress(KeyEvent.VK_I);
        robot.keyPress(KeyEvent.VK_T);
    } catch (AWTException e) {
        e.printStackTrace();
    }
}
LostSpirit

vlwww mano

poderia me ajudar em mais uma coisa?
Tipo:
caso eu queria ativar isso com uma tecla
para fazer um loop ex:

a pessoa aperta shift ou algum botão do mouse para entrar no while
seria algo parecido com
(robot.keyPress(KeyEvent.VK_O) comparar isso com true?

rodriguesabner

Tá querendo fazer um aimbot? Kkkkkkk brincadeira, tem sim, nesse caso vc faz assim:

Cria um evento de KeyReleased no TextField, e coloca esse código abaixo, eu uso o JavaSwing, pode ser que a maneira de escrever o evento mude, aí vc da uma pesquisada!

Toda vez que você apertar a tecla ENTER, o robot vai escrever na tela.

jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
    public void keyReleased(java.awt.event.KeyEvent evt) {
        jTextField1KeyReleased(evt);
    }
});

private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {            
        if (evt.getKeyCode() == evt.VK_ENTER) {
            new Thread() {
                @Override
                public void run() {
                    try {
                        Robot robot = new Robot();
                        robot.keyPress(KeyEvent.VK_O);
                        robot.keyPress(KeyEvent.VK_I);
                        robot.keyPress(KeyEvent.VK_SPACE);
                        robot.keyPress(KeyEvent.VK_L);
                        robot.keyPress(KeyEvent.VK_O);
                        robot.keyPress(KeyEvent.VK_S);
                        robot.keyPress(KeyEvent.VK_T);
                        robot.keyPress(KeyEvent.VK_S);
                        robot.keyPress(KeyEvent.VK_P);
                        robot.keyPress(KeyEvent.VK_I);
                        robot.keyPress(KeyEvent.VK_R);
                        robot.keyPress(KeyEvent.VK_I);
                        robot.keyPress(KeyEvent.VK_T);
                    } catch (AWTException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
LostSpirit

kkk não é para fazer um auto potion para Mu kk

eu tava fzd algo desse tipo;

@Override
    public void keyPressed(KeyEvent arg0) 
    {
		while() {
			
		}

    }
 
    @Override
    public void keyReleased(KeyEvent arg0) 
    {
         
    }
 
    @Override
    public void keyTyped(KeyEvent arg0) 
    {

eu tava querendo por em um cmd mesmo ex ao dar rum apertar f1 já faria isso
ai eu fiquei um pouco confuso em como mudar esse evt

tipo eu iria pegar a key enter (exemplo) ai já ativaria eu botaria um while caso ele apertasse f2 o programa sairia do while

rodriguesabner

Vc vai fazer em Fx ou Swing?

LostSpirit

Vou fazer no swing mesmo (acabei desistindo do fx)

rodriguesabner

Ok.

Você sabe o que é um método sobrecarregado? É quando você coloca atributos nele, ex:

private void imprimir_nome(){
    //Esse não é sobrecarregado
    String nome = "Abner";
    System.out.println(nome);
}

private void imprimir_nome(String nome){
    //Esse é sobrecarregado
    System.out.println(nome);
}

Você pode colocar qualquer coisa ao invés da variável nome, tipo: String name, String alguma_coisa_qualquer

OK, o mesmo acontece com o evt. Eu uso o Netbeans, então não sei como funciona bem em outras IDE’s.

Se você clicar como botão direito em cima do TextField vai aparecer algumas opções, você escolhe: Events, Key, KeyReleased

int i = 0;

    if (evt.getKeyCode() == KeyEvent.VK_F1) {
        System.out.println("Iniciando AutoPotion");
        i = 1;
        new Thread() {
            @Override
            public void run() {
                try {
                    while (i > 0) {
                        Robot robot = new Robot();
                        robot.keyPress(KeyEvent.VK_O);
                    }
                } catch (AWTException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    if (evt.getKeyCode() == KeyEvent.VK_F2) {
        System.out.println("Parando AutoPotion");
        i = 0;
    }
LostSpirit

opa man eu acabei fzd assim:

addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent event) {
				int i = 0;
			    if (event.getKeyCode() == KeyEvent.VK_F1) {
			        System.out.println("Iniciando AutoPotion");
			        i = 1;
			        new Thread() {
			            @Override
			            public void run() {
			                try {
			                    while (i > 0) {
			                        Robot robot = new Robot();
			                        robot.keyPress(KeyEvent.VK_O);
			                    }
			                } catch (AWTException e) {
			                    e.printStackTrace();
			                }
			            }
			        }.start();
			    }

			    if (event.getKeyCode() == KeyEvent.VK_F2) {
			        System.out.println("Parando AutoPotion");
			        i = 0;
			    }
			}
		});

mas eu estou com um error na variável i no while:

while (i > 0) {
			                        Robot robot = new Robot();
			                        robot.keyPress(KeyEvent.VK_O);
			                    }

i

rodriguesabner

Define a variável como global

LostSpirit

int i = 0;

addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent event) {	
			    if (event.getKeyCode() == KeyEvent.VK_F1) {
			        System.out.println("Iniciando AutoPotion");
			        i = 1;
			        new Thread() {
			            @Override
			            public void run() {
			                try {
			                    while (i > 0) {
			                        Robot robot = new Robot();
			                        robot.keyPress(KeyEvent.VK_O);
			                    }
			                } catch (AWTException e) {
			                    e.printStackTrace();
			                }
			            }
			        }.start();
			    }

			    if (event.getKeyCode() == KeyEvent.VK_F2) {
			        System.out.println("Parando AutoPotion");
			        i = 0;
			    }
			}
		});

fiz isso os error saiu do while
e foi pro
i=0 e i = 1.

rodriguesabner

Qual erro?

LostSpirit

O mesmo da print.

rodriguesabner

Não tem como mano, vc declarou ela como global? Eu testei aqui e não tem como dar esse erro

LostSpirit
boolean xd = false;
public ViewPotion() {
    addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent event) {

            if (event.getKeyCode() == KeyEvent.VK_F4) {
                System.out.println("Iniciando AutoPotion");
                xd = true;

                new Thread() {
                    @Override
                    public void run() {
                        try {
                            while (keepPressingO) {
                                Robot robot = new Robot();
                                robot.keyPress(KeyEvent.VK_O);
                            }
                        } catch (AWTException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();

            }

            if (event.getKeyCode() == KeyEvent.VK_F2) {
                System.out.println("Parando AutoPotion");
                xd = false;
            }
        }
    }); 
}

resolvi, mas não foi mt bem o que queria
pq precisa está na tela e apertar f4 para ativar
eu precisaria que ao apertar f4 ativasse mesmo sem estar na tela
creio que com o swing n vou conseguir isso :frowning:

LostSpirit

eu consegui tava vacilando
resolvi, mas não foi mt bem o que queria
pq precisa está na tela e apertar f4 para ativar
eu precisaria que ao apertar f4 ativasse mesmo sem estar na tela
creio que com o swing n vou conseguir isso :frowning:

rodriguesabner

Vc é muito negativo kkkkkkkk

LostSpirit

kkk já estava quase indo pro c# pra fazer isso,
vou ver se consigo com essa biblioteca
vlw mann

LostSpirit
@Override
	public void nativeKeyPressed(NativeKeyEvent event) {
		boolean keepPressingO = false;
		System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(event.getKeyCode()));
		if (event.getKeyCode() == NativeKeyEvent.VC_F3) {
            System.out.println("Iniciando AutoPotion");
            keepPressingO = true;

            new Thread() {
                @Override
                public void run() {
                    try {
                        while (keepPressingO) {

                        }
                    } catch (NativeHookException e) {
                        e.printStackTrace();
                    }
                }
            }.start();

        }

        if (event.getKeyCode() == NativeKeyEvent.VC_F4) {
            System.out.println("Parando AutoPotion");
            keepPressingO = false;
        }
		
	}

opa man acabei comentando duas vezes, desculpa…

Eu fiz isso com a biblioteca, mas estou com duvida em como fazer o while
continua sendo com o robot?

Acabei fazendo isso:

while (keepPressingO) {
                        Robot robot = new Robot();
                        robot.delay(1000);
                        robot.keyPress(KeyEvent.VK_O);
                        
                    }

eu procurei sobre a saida ela fica spammando

INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 750, 784.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 751, 784.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 753, 784.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 754, 785.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 756, 785.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 757, 785.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: hook_get_multi_click_time [208]: GetDoubleClickTime: 500.

jul 19, 2019 10:33:28 PM org.jnativehook.GlobalScreen$NativeHookThread enable
INFORMAÇÕES: process_mouse_moved [459]: Mouse dragged to 759, 785.

registros toda hr nao tou achando nada sobre como parar com isso.

rodriguesabner

Sim mano, ainda é o robot.

Pra desabilitar o LOG:

Logger loggy = Logger.getLogger(GlobalScreen.class.getPackage().getName());
loggy.setLevel(Level.OFF);

Pra mostrar so a tecla pressionada:

@Override
    public void nativeKeyPressed(NativeKeyEvent e) {
        char ch = e.getKeyChar();
        System.out.println(e.getKeyText(e.getKeyCode()));
//        int key = e.getKeyCode();
//        System.out.println(ch);
//        System.out.println(key);
//        String modifiers = e.getModifiersText(e.getModifiers());
//        int rawCode = e.getRawCode();
//        System.out.println(rawCode);
    }

Desvantagens em tempo de utilização que eu percebi até o momento:

A acentuação não funciona

LostSpirit

eu tinha cnseguido desatualizar os logs
mas eu encontrei um probleminha kkk
tipo creio que seja pq está apertando as 3 teclas de vez
ex: funciona no chat do mu, no texto do bloco de notas,
mas para usar as potions não
pq eu acho que tem que
apertar a tecla q e qnd apertar a tecla w soltar a tecla q

algo parecido no c#

KEYB_Event(VK_KEY_Q, 0, 0, 0) 'Segura o button 1
KEYB_Event(VK_KEY_Q, 0, 0, 0)
Thread.Sleep(60) ' aqui é o tempo que passa pra outra magia

KEYB_Event(VK_KEY_W, 0, KEYEVENTF_KEYUP, 0) 'Solta o button 1

KEYB_Event(VK_KEY_W, 0, 0, 0) 'Segura o button 2

Thread.Sleep(26) ' aqui é o tempo que passa pra outra magia

KEYB_Event(VK_KEY_E, 0, KEYEVENTF_KEYUP, 0) 'Solta o button 2

KEYB_Event(VK_KEY_E, 0, 0, 0) 'Segura o button 3

Thread.Sleep(60) ' aqui é o tempo que passa pra outra magia

KEYB_Event(VK_KEY_E, 0, KEYEVENTF_KEYUP, 0) 'Solta o button 3

não sei se tem como fazer isso com o robot, desse modo que estou usando funciona apenas uma vez quando aperta o q .

rodriguesabner

Assim?

Robot robot = new Robot();
 robot.keyPress(KeyEvent.VK_Q);
 robot.keyRelease(KeyEvent.VK_Q);
 robot.keyPress(KeyEvent.VK_W);
 robot.keyRelease(KeyEvent.VK_W);
 Thread.sleep(500);
LostSpirit

era algo parecido:

Robot robot = new Robot();
                    	 robot.keyPress(KeyEvent.VK_Q);
                    	 robot.keyPress(KeyEvent.VK_Q);
                    	 Thread.sleep(60);
                    	 robot.keyRelease(KeyEvent.VK_Q);
                    	 robot.keyPress(KeyEvent.VK_W);
                    	 Thread.sleep(26);
                    	 robot.keyRelease(KeyEvent.VK_W);
                    	 robot.keyPress(KeyEvent.VK_E);
                    	 Thread.sleep(60);
                    	 robot.keyRelease(KeyEvent.VK_E);

vlww manin kkk

rodriguesabner

Funcionou esse hackzinho aí?

LostSpirit

kkkk sss

javaflex

Relaxa que quase ninguem usa o JavaFx, Swing terá mais facilidade em pesquisar soluções.

LostSpirit

opa man kk eu tive um probleminha a thread ta ficando aberto msm depois de fechar a instancia
você poderia me dar um help nisso?

if (event.getKeyCode() == NativeKeyEvent.VC_F) {
            keepPressingO = true;

            new Thread() {
                @Override
                public void run() {
                    try {
                        while (keepPressingO) {
                        	 Robot robot = new Robot();
                        	 robot.keyPress(KeyEvent.VK_Q);
                        	 Thread.sleep(26);
                        	 robot.keyRelease(KeyEvent.VK_Q);
                        	 robot.keyPress(KeyEvent.VK_W);
                        	 Thread.sleep(16);
                        	 robot.keyRelease(KeyEvent.VK_W);
                        	 robot.keyPress(KeyEvent.VK_E);
                        	 Thread.sleep(26);
                        	 robot.keyRelease(KeyEvent.VK_E);
                        }
                    } catch (AWTException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
                }
            }.start();

        }

        if (event.getKeyCode() == NativeKeyEvent.VC_G) {
            keepPressingO = false;
        }
teria como eu fazer algo dentro desse if

if (event.getKeyCode() == NativeKeyEvent.VC_G) {

keepPressingO = false;

}

ou fora do while para parar a thread qnd sair do while?

Se eu matar a thread quando apertar para entrar no while dnv vai funcionar?

tou c dúvida kk

E também pensei em fazer isso:

private Thread threadOne;

e dentro do meu if :
if (event.getKeyCode() == NativeKeyEvent.VC_BACKQUOTE) {

eu chamar a thread com o while

assim eu conseguiria fechar a thread com um windowClosing

mas eu não conseguir montar a estrutura

threadOne.run();

Criado 19 de julho de 2019
Ultima resposta 21 de jul. de 2019
Respostas 28
Participantes 3