Hola a todos, estoy mejorando mi RAT en java que pronto acabare pero se me presenta una duda, a partir del siguiente codigo:
ackage robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.*;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
/**
*
* @author debci
*/
public class TestTeclado extends JFrame implements KeyListener {
public static void main(String args[]){
TestTeclado teclado = new TestTeclado();
teclado.Teclas();
try {
System.in.read();
} catch (IOException ex) {
Logger.getLogger(TestTeclado.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void KeyPress(KeyEvent evento) {
while(true) {
System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
}
}
public void keyTyped(KeyEvent evento) {
while(true) {
System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
}
}
public void keyPressed(KeyEvent evento) {
while(true) {
System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
}
}
public void keyReleased(KeyEvent evento) {
while(true) {
System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
}
}
private void Teclas() {
TestTeclado tecladito = new TestTeclado();
tecladito.setVisible(true);
addKeyListener(this);
}
}
La cosa, que diga cosas, es que se me presentan dos dudas:
1- Puedo agregar un keyListener a algo que no sea un frame? Es decir una simple aplicacion de shell.
2- Aunque lo haga con un jframe no me detecta las teclas, como es esto?
Saludos
Una pregunta, y si lo haces con un JFrame pero no lo haces visible, el KeyListener no funciona?
Cita de: Sir Crapsalot en 28 Noviembre 2009, 17:37 PM
Una pregunta, y si lo haces con un JFrame pero no lo haces visible, el KeyListener no funciona?
Nop, o igual cojes las primeras teclas, pero cuando el usuario haga un solo clic, se acabo el listener
No lamentablemente no, hasta el momento tienes que implementar un KeyLogger si no mal recuerdo L-EYER tiene un tutorial de como hacer un Keylogger, ademas este codigo no funcionará ya que por cada tecla que se apreta o suelta genera un evento.
Lo que sucede aqui apreta una tecla y queda totalmente colgado.
Solucionado, e aqui la solucion:
public class Teclas extends JFrame implements KeyListener {
private String linea1 = "", linea2 = "", linea3 = "";
private JTextArea areaTexto;
// configurar GUI
public Teclas()
{
super( "Demostración de eventos de pulsación de tecla" );
// establecer objeto JTextArea
areaTexto = new JTextArea( 10, 15 );
areaTexto.setText( "Oprima cualquier tecla en el teclado..." );
areaTexto.setEnabled( false );
areaTexto.setDisabledTextColor( Color.blue );
getContentPane().add( areaTexto );
addKeyListener( this ); // permitir al marco procesar eventos de teclas
setSize( 350, 100 );
setVisible( true );
} // fin del constructor de DemoTeclas
// manejar evento de pulsación de cualquier tecla
public void keyPressed( KeyEvent evento )
{
linea1 = "Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() );
establecerLineas2y3( evento );
}
// manejar evento de liberación de cualquier tecla
public void keyReleased( KeyEvent evento )
{
linea1 = "Se soltó tecla: " + evento.getKeyText( evento.getKeyCode() );
establecerLineas2y3( evento );
}
// manejar evento de pulsación de una tecla de acción
public void keyTyped( KeyEvent evento )
{
linea1 = "Se escribió tecla: " + evento.getKeyChar();
establecerLineas2y3( evento );
}
// establecer segunda y tercera líneas de salida
private void establecerLineas2y3( KeyEvent evento )
{
linea2 = "Esta tecla " + ( evento.isActionKey() ? "" : "no " ) +
"es una tecla de acción";
String temp = evento.getKeyModifiersText( evento.getModifiers() );
linea3 = "Teclas modificadoras oprimidas: " +
( temp.equals( "" ) ? "ninguna" : temp );
areaTexto.setText( linea1 + "\n" + linea2 + "\n" + linea3 + "\n" );
}
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
Teclas aplicacion = new Teclas();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase DemoTeclas
un rat bueno deberias unirte con crapsalot a ver si sakan algo :) por que egyware y yo estamos en uno que ya lo tenemos super avanzado ;D pero no finalizado pero hay vamos...
Saludos.
Offtopic:
oh! si debemos retomar ese proyecto(por lo menos yo) porque no he tenido tiempo ahora, pero en el verano ya tengo mas tiempo, me quedan 3 exames mas y wiiii (El lunes empieza el primer examen :¬¬)
Saludos
yo tmb tengo examenes solo que son de secundaria (curso 4 de eso) asi que no son problema xD
Saludos
;D Que trampozo utilizas el jtextarea para poder capturar tus eventos, pero bueno es valido
aqui otro ejemplo utilizando el jframe
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class eventosTeclado extends JFrame {
private JLabel etqEstado;
public static void main(String args[]) {
eventosTeclado eT = new eventosTeclado();
eT.setLocationRelativeTo(null);
eT.setVisible(true);
}
public eventosTeclado() {
iniciarComponentes();
}
private void iniciarComponentes() {
etqEstado = new JLabel();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("Eventos de Teclado");
setMinimumSize(new Dimension(500, 600));
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
KeyPressed(evt);
}
public void keyReleased(KeyEvent evt) {
KeyReleased(evt);
}
public void keyTyped(KeyEvent evt) {
KeyTyped(evt);
}
});
getContentPane().setLayout(new FlowLayout());
etqEstado.setText(" ");
getContentPane().add(etqEstado);
pack();
}
private void KeyPressed(KeyEvent evt) {
etqEstado.setText("Se oprimio la tecla " +evt.getKeyText(evt.getKeyCode()));
}
private void KeyReleased(KeyEvent evt) {
etqEstado.setText("Se Solto la tecla " +evt.getKeyText(evt.getKeyCode()) );
}
private void KeyTyped(KeyEvent evt) {
etqEstado.setText("Se escribio la tecla " +evt.getKeyText(evt.getKeyCode()));
}
}
Faltaron algunos detalles..
Saludos
Gracias miles, ahora mismo lo pruebo!
Saludos