elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿como detectar cuando alguien copia algo al portapapeles? java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿como detectar cuando alguien copia algo al portapapeles? java  (Leído 2,282 veces)
p4nd4criss

Desconectado Desconectado

Mensajes: 40


Ver Perfil
¿como detectar cuando alguien copia algo al portapapeles? java
« en: 4 Junio 2012, 01:52 am »

ha algún evento k me alerte cuando alguien copia algo al porta-papeles
ya conozco la solución de LOSTOWNERSHIP
incluso aki tengo el codigo
Código:
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;
import java.awt.datatransfer.Transferable;

public class ClipboardTextListener {

Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Owner owner = new Owner();
    public void comienzaAEscuchar () {
        
        
        cb.addFlavorListener(new CentinelaFlavor (cb) );
        Transferable contents = cb.getContents(owner);
        cb.setContents(contents, owner);
    }
    class Owner implements ClipboardOwner{
        @Override
        public void lostOwnership(Clipboard clipboard, Transferable contents) {
            try {Transferable newContents = clipboard.getContents(this);
            if (contents.getTransferData(DataFlavor.stringFlavor).equals(newContents.getTransferData(DataFlavor.stringFlavor)))  return;
            clipboard.setContents(newContents, this);
            System.out.println("a");
            textoHaCambiado ( (String) clipboard.getData(DataFlavor.stringFlavor));
            } catch (Exception e) {
                System.out.println ("No fue texto"); //Puedes borrar esto
            }
        }
    }
    class CentinelaFlavor implements FlavorListener {
        private Clipboard c;
        public CentinelaFlavor (Clipboard c) {
            this.c = c;
        }
        public void flavorsChanged(FlavorEvent e) {
            try {
                System.out.println("b");
                Owner o = new Owner();
                String nuevaString = (String) c.getContents(o).getTransferData(DataFlavor.stringFlavor);
                c.setContents(c.getContents(o), new Owner() );
                textoHaCambiado ( nuevaString);
            } catch (Exception ex) {System.out.println ("No fue texto 2");/*Puedes borrar este*/ }
        }
    }
    protected void textoHaCambiado(String nuevoTexto) {
        System.out.println(nuevoTexto);

    }
}
cuando alguien reemplaza el contenido del portapapeles lee el nuevo contenido y vuelve a subir ese contenido declarando ownership otra ves

pero surge un problema si mas de una aplicación hace esto
digamos si el Jdownloader esta funcionando al mismo tiempo, y copio algun texto ambos programas
se pelean por el portapepeles

uno le quita ownership al otro, y el otro se la vuelve a quitar al primero ,causando k el primero se la quite al segundo.......

existe alguna otra solución?
algun evento que escuche el portapepeles?

gracias gente :3


« Última modificación: 6 Junio 2012, 04:14 am por pandacriss » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines