Ayuda .bat que copie una palabra o frase al portapapeles

Iniciado por mundomadelman, 2 Octubre 2014, 20:14 PM

0 Miembros y 1 Visitante están viendo este tema.

mundomadelman

hola necesito un script para que crear un bat que copie una palabra o frase entre sus comillas, es decir, un texto, normalmente pequeño, al portapapeles. es decir, un bat que al ejecutarlo, copie y pegue una palabra al portapapeles o la ventana de escritura activa en la que se encuentre.

muchas gracias

Eleкtro

Para copiar texto debes redireccionar la salida de cualquier comando al comando Clip, ejemplo:

Código (dos) [Seleccionar]
Echo Hola Mundo! | Clip.exe

...a lo que se le añade una linea vacia al final.

Para pegar el contenido del portapapeles, tarea que debería ser muy sencilla, pero de hecho es imposible en algo tan simple como Batch, tampoco puedes recurrir a un lenguaje simple como VisualBasicscript ya que tampoco soporta operaciones con el portapapeles (como explican en este post ).

Puedes crear una pequeña utilidad en cualquier lenguaje que soporte el portapapeles, en VB.NET (y en C#) sería tan sencillo como esto:
Código (vbnet) [Seleccionar]
Dim Text As String = Clipboard.GetText()
Console.WriteLine(Text)

...sin el código intermediaro para realizar llamadas a la API de Windows para localizar la ventana a la que le quieres enviar el texto, eso ya sería mucho trabajo en cualquier lenguaje.

También puedes utilizar aplicaciones de terceros como complementos (comandos externos adicionales) de Batch, como Paste.exe: http://www.c3scripts.com/tutorials/msdos/paste.html
(no lo he testeado ni lo he descargado)

Saludos.








mundomadelman

gracias por la respuesta.

se podria hacer algo que fuese generico ? es decir, que un archivo que se llame hola.bat

o hola.vcb

que la instruccion sea que copie y pegue en el portapapeles o ventana de texto que se seleccione, el nombre del archivo cualquiera que sea ?

gracias

Eleкtro

#3
No se que entenderás por "ventana de texto", pero realizar lo que propones, a parte de ser algo muy laborioso, elaborarlo de forma genérica parece una tarea imposible, ya que hay que conocer previamente o hallar el nombre de la Class de la ventana de edición y el HWND de dicha ventana (sin eso no haces nada), además, hay que tener en cuenta que muchos controles de edición (textboxes, richtextboxes, etc) pueden tener ventanas hijas donde se encuentra la capa del control editable.


En resumen:

Desarrollar una aplicación en la que simplemente escribiendo el nombre de un proceso o el título de una ventana de un proceso para pasarlo como parámetro no conseguirias nada, ya que faltarían datos (que ya he mencionado),
de todas formas con el nombre del proceso o el título de la ventana puedes hallar la ventana principal y enumerar sus ventanas hijas y el nombre de sus classes para hallar las ventanas de los controles editables, ¿el problema?, que obviamente pueden haber varios controles editables en una sola aplicación así que es practicamente imposible determinar en que ventana quieres pegar el texto a menos que supieras el índice al que corresponderia la ventana a la que quieres pegar el texto.

Poder puedes hacer algo medianamiente decente (de uso genérico hablando), pero por supuesto NO en Batch, NO en VBS, mi sugerencia: C++ o C#/VB.NET.

Aparte, para casos específicos siempre puedes recurrir a Microsoft UI Automation, hay muchas herramientas de este estilo:

Microsoft Inspect
Microsoft UI Accessibility Checker
WinSpy++

Con cualquiera de ellas puedes averiguar el handle, classname, y otra información adicional de cualquier ventana de un programa.






Respecto a lo de copiar en el portapapeles:

ClipCopy.bat
Código (dos) [Seleccionar]
@Echo OFF & Title Clipboard Copy

If "%~1" EQU "" (Exit /B 1)

Echo %~1| Clip.exe
Exit /B 0


Uso:
Código (dos) [Seleccionar]
ClipCopy.bat "Frase a copiar"

Saludos.