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”
[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
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<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 >< 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();
}
}
}
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???
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…
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