Página 1 de 1

Extraer testo de otras aplicaciones.

Publicado: 08 Oct 2010, 16:47
por pedropedro
Pues eso, básicamente quiero hacer una aplicación que coja el texto de otras aplicaciones, como chats, y lo guarde en archivos de texto.
La parte de guardar archivos de texto, con nombre dinámico basado en el nombre de la ventana y el la fecha/hora mas o menos lo tengo, pero no tengo ni idea de como extraer texto de otras aplicaciones.

En caso de que se pudiera, me gustaría algo de ayuda para poderle añadir opciones, tales como elegir cuales de las ventanas activas con botones o listas o algo, o elegir donde guardar ese texto en concreto, etc.

Os agradezco la ayuda de antemano.

Re: Extraer testo de otras aplicaciones.

Publicado: 09 Oct 2010, 04:05
por Juanchi
Antes que nada hola a todos... REGRESE :smt003
________________________________________________

respondiendo tu pregunta:
Para extraer texto de otras aplicaciones esta el ejemplo en los archivos de autoit (helpfiles)
usas el comando WinGetText("Titulo de la ventana", "") Si lo dejas vacio extrae todo el texto y si pones algo no se q pasa XD
(Eso q te lo explique alguien que sepa mas jeje)

Por ejemplo si lo que queres es leer un archivo de texto en el bloc de notas Y LA VENTANA ESTA, POR LO MENOS MINIMIZADA, seria asi:

$text = WinGetText("Texto - Bloc de notas", "")
MsgBox(0, "el texto leido fue:", $text)


si la ventana no esta abierta seria asi:

$text = fileread("Texto.txt")
MsgBox(0, "el texto leido fue:", $text)

[Espero haberte ayudado y no haberte entreberado mas] jeje...

Salu2!

Re: Extraer testo de otras aplicaciones.

Publicado: 10 Oct 2010, 16:36
por pedropedro
Gracias, pero hay un problema, y es que solo extrae texto del primer control de la ventana. Es decir, en los navegadores solo extrae el texto de la barra de direcciones, por ejemplo.

En muchas otras aplicaciones ni siquiera extrae nada.


¿Hay algún comando o algo para elegir de que control extraer el texto? ¿Y como saber ese control?

Re: Extraer testo de otras aplicaciones.

Publicado: 11 Oct 2010, 08:57
por Ximorro
Hola, hay otra manera más directa, está la función ControlGetText, con la que puedes tomar el texto del control exacto en el que estés interesado.
Tienes que saber el identificador del control, cosa que puedes hacer con la herramienta Au3Info que viene con AutoIt.
Por ejemplo para capturar el texto de tu ventana Notepad mirando directamente el control de edición:
ControlGetText("Texto - Bloc de notas", "", "Edit1")

Publicado: 11 Oct 2010, 23:29
por Juanchi
pedropedro escribió:Gracias, pero hay un problema, y es que solo extrae texto del primer control de la ventana. Es decir, en los navegadores solo extrae el texto de la barra de direcciones, por ejemplo.

En muchas otras aplicaciones ni siquiera extrae nada.


¿Hay algún comando o algo para elegir de que control extraer el texto? ¿Y como saber ese control?
Perdona no tenia idea de q pasara eso... Nunca lo use para extraer texto de un navegador jeje

Re: Extraer testo de otras aplicaciones.

Publicado: 13 Oct 2010, 23:21
por Chefito
Hacer un programa que coja todo el texto de todas las ventanas y todos los controles de éstas es casi imposible :smt012 . Al haber muchos programas hechos con flash, con java, muchos exploradores, etc, etc, etc....que se salen de los controles y ventanas comunes de windows, pues es muy dificil.
Para los exploradores se tiene que atacar con su api. Por ejemplo, para el Internet Explorer tienes que utilizar la udf IE.au3.

Además, lo que quieres hacer tiene pinta de ser un programa espía y como ya debes de saber, este tipo de programas no están permitidos en el foro :smt011 .

Saludos.

Re: Extraer testo de otras aplicaciones.

Publicado: 14 Oct 2010, 23:50
por pedropedro
Chefito escribió:Hacer un programa que coja todo el texto de todas las ventanas y todos los controles de éstas es casi imposible :smt012 . Al haber muchos programas hechos con flash, con java, muchos exploradores, etc, etc, etc....que se salen de los controles y ventanas comunes de windows, pues es muy dificil.
Para los exploradores se tiene que atacar con su api. Por ejemplo, para el Internet Explorer tienes que utilizar la udf IE.au3.

Además, lo que quieres hacer tiene pinta de ser un programa espía y como ya debes de saber, este tipo de programas no están permitidos en el foro :smt011 .

Saludos.
Claro, tu teoría tiene mucha lógica, sobre todo si ves que digo claramente que quiero(querría, ojala xd) que se pueda elegir que ventanas o controles coger con un click encima de ellos, estilo AutoIt Windows Info. Y aun mas cuando digo que quiero que salga una ventana que te pregunte donde guardarlo.
Es muy lógico que un programa espía te pregunte donde guardar los datos "robados", y ya de paso a quien se los quieres enviar ¿No?

De todas formas, no parece ser muy fácil, y como todo esto no tiene un fin especifico mas allá de probar o aprender, creo que pasaré a otra cosa. Quizá en un tiempo halla aprendido lo suficiente para hacer esto. Ademas, no seria solo en navegadores (por lo del api), me gustaría capturar también mas cosas. En realidad es en general, coger texto de aplicaciones, por probar. Realmente no tengo un fin especifico de momento. No tengo ideas para una aplicación util xD.

Por cierto, gracias a Ximorro por informarme sobre el AutoIt Windows Info. No lo conocía, pero creo que lo voy a usar para hacer lo inverso, usar eso para insertar pulsaciones de teclado en VB.NET. Hace tiempo intente hacer un programa que enviase frases aleatoriamente a la gente de este modo, pero me pedía el Window Class de la ventana objetivo. Ahora con esto puedo verlo y a lo mejor intento eso, para divertirme viendo que responde la gente ante mensajes aleatorios indiscriminados jajaja

Re: Extraer testo de otras aplicaciones.

Publicado: 18 Oct 2010, 11:25
por BasicOs
Espero que se emplee con fines de ayuda y positivo para terceros, no como algo que de mala fama. El tema de capturar pantallas lo suelen hacer con el printscreen o la función de captura de pantallas.
Lo de reconocer texto dentro de java y otras es un topico recurrente en Autoit, es decir el OCR de jpgs, OCR=Reconocimiento óptico de caracteres, es decir pasar de imagen a caracter y unirlo para tener palabras.
Como siempre no es tan sencillo hacerlo de cero, no reinventar la rueda(Que se podría hacer un OCR en Autoit con tiempo), sino como en muchos casos en Autoit usando "Apis" y dlls, reutilizando motores que otros hacen como el caso de mysql/sqllite.
Buscando OCR en el buscador del foro salen bastantes resultados, también este enlace lleva a alguien que usa como OCR base Tesseract, que es el OCR que tiene Google en gratuito.
http://www.emesn.com/autoitforum/viewto ... =ocr#p8758

http://www.autoitscript.com/forum/index ... opic=89542

http://es.wikipedia.org/wiki/Tesseract_OCR
Tesseract es desarrollado actualmente por Google y distribuido bajo la licencia Apache, versión 2.0.
Tesseract está considerado como uno de los motores OCR libres con mayor precisión disponibles actualmente.
Procesa inglés, francés, italiano, alemán, español, portugués brasileño y neerlandés
Estas son las funciones en Autoit que han creado, como ven dos funciones clave:
  • Capturar texto en bloque
  • Buscar si existe un texto en algún lugar
en varias situaciones o elementos:
  • Pantalla(Screen) en
  • Ventana (Win),
  • y en Control:
_TesseractTempPathSet($temp_path)
_TesseractScreenCapture($get_last_capture = 0, $delimiter = "", $cleanup = 1, $scale = 2, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
_TesseractWinCapture($win_title, $win_text = "", $get_last_capture = 0, $delimiter = "", $cleanup = 1, $scale = 2, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
_TesseractControlCapture($win_title, $win_text = "", $ctrl_id = "", $get_last_capture = 0, $delimiter = "", $expand = 1, $scrolling = 1, $cleanup = 1, $max_scroll_times = 5, $scale = 2, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
_TesseractScreenFind($find_str = "", $partial = 1, $get_last_capture = 0, $delimiter = "", $cleanup = 1, $scale = 2, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
_TesseractWinFind($win_title, $win_text = "", $find_str = "", $partial = 1, $get_last_capture = 0, $delimiter = "", $cleanup = 1, $scale = 2, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
_TesseractControlFind($win_title, $win_text = "", $ctrl_id = "", $find_str = "", $partial = 1, $get_last_capture = 0, $delimiter = "", $expand = 1, $scrolling = 1, $cleanup = 1, $max_scroll_times = 5, $scale = 2, $left_indent = 0, $top_indent = 0, $right_indent = 0, $bottom_indent = 0, $show_capture = 0)
Salu22:)