[RESOLVIDO]Alguem sabe como fazer pra receber uma string e redigitar ela simulando um teclado?

Olá pessoa,
a classe Robot tem um metodo chamado Keypress que pressiona uma tecla do teclado passando como parametro o código do caracter, exemplo: robot.keypress(65); ele imprime a letra “A” na tela ativa, sendo assim minha idéia é receber por mensagem via bluetooth uma string e nela pegar caracter por caracter e mandar imprimir na tela ativa que só é possível redigitando né? pois não sei se é possível passar uma string inteira.

ps: se eu utilizo o exemplo citado a cima eu consigo imprimir o a na tela ativa normalmente, mas se eu faço isso:
int x; character y; String msg = "testando"; for(int i=0;i<msg.length();i++) { y=msg.charAt(i); x=y.hashCode(); robot.keyPress(x); robot.keyRelease(x); }

mesmo o x valendo 116 que é a letra “t”, da pau, ao inves de imprimir a letra t ele imprime a data de hoje, muito louco hehe
e se eu coloco somente robot.keypress(116); ele imprime certinho a letra “t”

alguem sabe como solucionar isso?

Grato!

up aí galeraa

Eu não tenho muita certeza mas eu acho que tu deve usar o hashCode tu tem que pegar o valor do char, talvez funcione assim:

int x;
character y;
String msg = "testando";
  for(int i=0;i<msg.length();i++)
            {
                y=msg.charAt(i);
                x=Character.getNumericValue(y);
                robot.keyPress(x);
                robot.keyRelease(x); 
        }

Então pessoa Garba…

Não sei se já recolveu seu problema…
Peguei a idéia que estava tentando implementar e fiz aqui do meu jeito…Funcionou!!!

package teste;

import java.awt.AWTException;
import java.awt.Robot;

public class Strings {

	public Strings() {
		// TODO Apêndice de construtor gerado automaticamente
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Apêndice de método gerado automaticamente
	      

		Robot robot;
		try {
			robot = new Robot();
			int x;
			Character y;
			String msg = &quot;testando&quot;;
			
			for(int i = 0; i &lt; msg.length(); i++)
			{
				y = msg.charAt(i);
				System.out.println(y);
				//x = Character.getNumericValue(y);
				x = y.hashCode();
				System.out.println(x);
				
				robot.keyPress(29);
				robot.keyRelease(29); 
			}
			
		
		} catch (AWTException e) {
			// TODO Bloco catch gerado automaticamente
			e.printStackTrace();
		}
	}
}

Não sei se era isso que estava querendo …mas a saida no console foi

Bom se não for isso espero pelo menos ter dado alguma idéia

[]'s

Tem razão wilcorrea.

Viajei no esquema do NumericValue

Nada que isso…viajou não…
Tentei tbm…só que faiou…hehehe

valeu

então, já tinha testado desse jeito…

[code] public static void main(String[] args) {
// TODO Apêndice de método gerado automaticamente

    Robot robot;   
    try {   
        robot = new Robot();   
        int x;   
        Character y;   
        String msg = "testando";   
           
        for(int i = 0; i < msg.length(); i++)   
        {   
            y = msg.charAt(i);   
            System.out.println(y);   
            //x = Character.getNumericValue(y);   
            x = y.hashCode();   
            System.out.println(x);   
               
            robot.keyPress(29);   
            robot.keyRelease(29);   
        }   
           
       
    } catch (AWTException e) {   
        // TODO Bloco catch gerado automaticamente   
        e.printStackTrace();   
    }   
}   

} [/code]

assim da certo mesmo pq simprime no próprio system.out.println, porem o que não da certo é:

[code]
public static void main(String[] args) throws IOException {
// TODO Apêndice de método gerado automaticamente

    Robot robot;   
    try {   
        robot = new Robot();   
        int x;   
        Character y;   
        String msg = "testando";   
        Process p = Runtime.getRuntime().exec("c:\\windows\\system32\\notepad.exe")   ;
        robot.delay(1000);
        for(int i = 0; i < msg.length(); i++)   
        {   
            y =msg.charAt(i);   
           // System.out.println(y);   
            //x = Character.getNumericValue(y);   
            x = y.hashCode();   
           // System.out.println(x);   
            robot.keyPress(x);   
            robot.keyRelease(x);  
            robot.delay(200);
        }   

    } catch (AWTException e) {   
        // TODO Bloco catch gerado automaticamente   
        e.printStackTrace();   
    }   
}[/code]

ele imprime assim no bloco de notas: 20:03 11/3/2008520:03 11/3/20081,4/
muito estranho né? hehe
eu precisava usar isso pra poder mandar mensagem pelo celular via bluetooth, tratar ela e enviar por msn…experimento para meu tcc

será que tem outra solução???

[]´s

UHUahuahuaua…é sim…

Bom ai o problema cresce, mas nem tanto…esses troço doido são o F5 no notepad :·)
O que ocorre é que pra digitar com o robot temos que emular as teclas do teclado. Elas não disparam caracteres acsII… Não sei porque!!! O teclado envia inteiros que são resolvidos peo SO.

O java emula isso com eventkeys.
Bom como não arrumei nada na API que converta strings para KeyEvent inventei umas gambiarras ai…huahuaua
Repara não hein…agora faz o que vc queria…ainda não entendo pra que usar robot, mas funciona.
Ah se quiser que outros caracteres sejam analisados basta acrescentar no switch…

package teste;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;

public class Strings {

	public Strings(){
		super();
	}
	
	public int returnIndex(char toIndex, char... args) {  
		for (int i=0; i&lt;args.length; i++) {  
			if (toIndex == (args[i]) )   
				return i;  
		}  
		return -1;  
	}  


	public int getKeyEvt(char caracter){
		int keyInput = -1;

		switch (returnIndex(caracter, 
				'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
				'i', 'j', 'l', 'm', 'n', 'o', 'p', 'q', 
				'r', 's', 't', 'u', 'v', 'x', 'z')) {  
				case 0 : 
					keyInput = KeyEvent.VK_A; 
					break;  
				case 1 : 
					keyInput = KeyEvent.VK_B; 
					break;  
				case 2 : 
					keyInput = KeyEvent.VK_C; 
					break; 
				case 3 : 
					keyInput = KeyEvent.VK_D; 
					break; 
				case 4 : 
					keyInput = KeyEvent.VK_E; 
					break; 
				case 5 : 
					keyInput = KeyEvent.VK_F; 
					break; 
				case 6 : 
					keyInput = KeyEvent.VK_G; 
					break; 
				case 7 : 
					keyInput = KeyEvent.VK_H; 
					break; 
				case 8 : 
					keyInput = KeyEvent.VK_I; 
					break; 
				case 9 : 
					keyInput = KeyEvent.VK_J; 
					break; 
				case 10 : 
					keyInput = KeyEvent.VK_L; 
					break;
				case 11 : 
					keyInput = KeyEvent.VK_M; 
					break; 
				case 12 : 
					keyInput = KeyEvent.VK_N; 
					break; 
				case 13 : 
					keyInput = KeyEvent.VK_O; 
					break; 
				case 14 : 
					keyInput = KeyEvent.VK_P; 
					break; 
				case 15 : 
					keyInput = KeyEvent.VK_Q; 
					break;
				case 16 : 
					keyInput = KeyEvent.VK_R; 
					break; 
				case 17 : 
					keyInput = KeyEvent.VK_S; 
					break; 
				case 18 : 
					keyInput = KeyEvent.VK_T; 
					break; 
				case 19 : 
					keyInput = KeyEvent.VK_U; 
					break; 
				case 20 : 
					keyInput = KeyEvent.VK_V; 
					break; 
				case 21 : 
					keyInput = KeyEvent.VK_X; 
					break; 
				case 22 : 
					keyInput = KeyEvent.VK_Z; 
					break; 

				default : 
					keyInput = KeyEvent.VK_ENTER;  
		}  
		return keyInput;
	}



	public static void main(String[] args) throws AWTException, IOException {   
		// TODO Apêndice de método gerado automaticamente   
		try {   	        				
			int keyEvt;
			Robot robot = new Robot();      
			String msg = "testando";   
			
			Strings teste = new Strings();
			Runtime.getRuntime().exec("notepad.exe"); 

			robot.delay(1000);

			for(int i = 0; i &gt;&lt; msg.length(); i++)   
			{   
				keyEvt = teste.getKeyEvt(msg.charAt(i));   
  
				robot.keyPress(keyEvt);   
				robot.keyRelease(keyEvt);  
				robot.delay(200);
			}   

		} catch (AWTException e) {   
			// TODO Bloco catch gerado automaticamente   
			e.printStackTrace();   
		}   
	}
}

Qualquer coisa retorna ai valeu

[]'s

1 curtida

mando bem wilcorrea hehe, brigado, funcionou mesmo, já quebra um galhão aqui…
agora vc citou que não sabe pq eu estou usando a classe robot, existe outra forma de fazer isso com outro classe???

valeu

Na verdade imaginei que se a string que foi enviada por bluetooth (nota: não sei como isso funciona) chegou dentro de uma string dentro da aplicação java vc poderia simplesmente exibi-la num componente da própria aplicação (um jframe ou jdialog) não sei… Vai ficar mais elaborado com a robot…mas aparentemente é uma volta desnecessária…

MAS QUE FIQUE CLARO QUE NÂO TENHO CONHECIMENTO SUFICIENTE SOBRE O AMBIENTE QUE VC ESTÁ DESENVOLVENDO…

De repente é só um palpite sem sentido…

Valeu

entendi o que vc quis dizer e realmente da certo desse jeito, eu uso isso pra executar comandos e mover o mouse direto da string, porém meu objetivo é conversa no msn pelo celular e com essa solução que vc citou em cima deu certinho, to conseguindo mandar mensagem pelo msn :slight_smile:

valeu pela ajuda!!!

Pow…vc podia me passar esse esquemas ai então ué…

rsrsrsrsrs

é meu tcc, quando tiver pronto se quiser te mando sim…
é fazer o celular virar um controle remoto pro pc via bluetooth hehe