Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturas a código delphi (https://www.clubdelphi.com/foros/showthread.php?t=54876)

José Luis Garcí 02-04-2008 09:40:48

Capturas a código delphi
 
Me han dicho que es posible capturar la pantalla de un programa y convertirla a un archivo DFM con la apariencia de la pantalla, sabeis si esto realmente existe y sis es así que programa es.

Persoanlmente lo dudo, pero me lo han dicho un par de universistarios, que han venido a venderme un programa:p, no es por nada, pero como que no van a poder:cool:

Gracias como siempre por vuestros comentarios

Black_Ocean 02-04-2008 10:04:03

Interesante... También me gustaría saber.

Espero que algún colega de ClubDelphi pueda averiguar si es esto cierto y contarnos a todos :D

Saludos y la verdad, estoy muy impaciente por saber :p

Neftali [Germán.Estévez] 02-04-2008 10:04:54

Cita:

Empezado por José Luis Garcí (Mensaje 276942)
Me han dicho que es posible capturar la pantalla de un programa y convertirla a un archivo DFM con la apariencia de la pantalla, sabeis si esto realmente existe y sis es así que programa es.

No acabo de entenderte muy bien,... Si te refieres a que a partir de una imagen se pueda generar un formulario con los controles correspondientes, me parece un poco raro...

Lo que sí se puede hacer (pero no creo que sea eso lo que quieren venderte) es coger un ejecutable hecho en Delphi. Decompilarlo y extraer de ahí los formularios y los recursos (pero no el código). Si en esa aplicación haz utilizado componentes estandard de Delphi, obtendrás el DFM y el PAs de los formularios, pero con los eventos y procedimientos vacíos...

Black_Ocean 02-04-2008 10:11:07

Cita:

Empezado por Neftali (Mensaje 276948)
Si te refieres a que a partir de una imagen se pueda generar un formulario con los controles correspondientes, me parece un poco raro...

Yo por lo que entendí de la pregunta, se refiere a que un programa externo puede capturar un formulario en tiempo de ejecución y a partir de esa acción irá recorriendo el formulario, las clases y componentes, determinando las propiedades de cada uno, etc para ir formando el archivo .DFM

¿O es otra cosa lo que quiso decir?

Comenten :p

Ñuño Martínez 02-04-2008 10:28:09

Así, en frío y sin pensar mucho, lo dudo. Ya es harto difícil que una computadora "entienda" un texto escrito como para enseñarle a distinguir un botón de un campo de entrada de texto con texto por defecto... :rolleyes:

Neftali [Germán.Estévez] 02-04-2008 13:59:27

2 Archivos Adjunto(s)
Cita:

Empezado por José Luis Garcí (Mensaje 276942)
Me han dicho que es posible capturar la pantalla de un programa y convertirla a un archivo DFM con la apariencia de la pantalla, sabeis si esto realmente existe y sis es así que programa es.

Bueno, dándole vueltas al tema, se me ocurre otra forma de hacerlo siempre que no hablemos de "captura gráfica" de una pantalla.
Me explico.
Estando con nuestro escritorio y una serie de apolicaciones funcionando podemos calcular el handle de cualquier ventana, entre ellas la activa utilizando la API GetForegroundWindow o GetActiveWindow.

A partir del handle de esa ventana podemos obtener todas las ventanas hijas y muchas características de estas otras ventanas (Texto, posición, Flags,...) utilizando EnumChildWindows. Utilizando la API GetClassName, podemos a partir del handle de una ventana obtener su Clase.

Si ponemos esto en práctica, a partir de una ventana que tengamos en el escritorio podemos obtener una cosa como esta.

Como se ve es posible obtener las clases de los controles que forman el Form. Suponiendo que tenemos la clase de los controles, el parent, el texto, la posición y el tamaño, se supone que podríamos en ejecución "replicar" en cierta forma esa ventana, siempre que los controles pertenezcan a los estandard de Delphi.

No se si me he acabado de explicar...

Os paso el ejemplillo...
Si os animáis intentamos desarrollarlo un poco a ver dónde llegamos.;)

Delphius 02-04-2008 15:31:54

Hola,
Creo que es lo que menciona Neftali, recuerdo que un programita que bajó mi hermano de la web ofrecía entre tantas utilidades una que mostraba información de la ventana: clase, ancho, largo, y demás...

Ahora no tengo a ese programita (freeware), pero recuerdo su Nombre: joSuTiLs. La utilidad en cuestión se llama JosHandle... siempre tuve la ligera sospecha de que fue hecho en Delphi. Ahora que veo el sitio parece que lo ha actualizado (no tiene esa apariencia la versión que yo tenía).

No vi tus adjuntos Neftali, pero por la imagen que adjuntas, diria que es lo mismo que ofrece JosHandle.

Saludos,

José Luis Garcí 02-04-2008 20:01:19

Gracias por las respuestas, la idea según la describieron, ejecutan un programa en segundo plano, capturan la pantalla que este en ejecución de cualquier programa de gestión, y crean un archivo que desde su programa y esto es lo que no queda claro, queda de fondo para AUTOCREAR una pantalla lo más parecido posible a la pantalla capturada.

Neftali, el programa que me quieren vender era de gestión, utilizando capturas de mi programa, actual, como idea me parece muy interesante, pero no se yo moralmente, aún que las pantallas de gestión suelen ser +- parecidas, pero aparte de que la situación de mi empresa no es precisamente boyante, me dolería pagar por un programa de gestión cuando quiero hacerme yo adaptado a mis necesidades.

he visto la imagen que pones y pienso que si es posible, por que obtienen el tipo de componente, la posición, solo fletaría saber el tamaño y situación (al frente/fondo). quede una herramienta muy curiosa, no os parece.

Neftali [Germán.Estévez] 03-04-2008 10:15:38

Cita:

Empezado por José Luis Garcí (Mensaje 277084)
...he visto la imagen que pones y pienso que si es posible, por que obtienen el tipo de componente, la posición, solo fletaría saber el tamaño y situación (al frente/fondo).

En realidad ese ejemplo está hecho en un rato, pero se pueden obtener muchas más características de cada componente. Así que en teoría se puede hacer.
De todas formas, como ya te dije, hay otras formas más sencillas de obtener el DFM; Como puede ser, por ejemplo, Dede, para programas hechos en Delphi.

2 inconvenentes/problemas principales le veo a esto:

(1) Que lo que obtienes es el DFM (de alguna de las formas descritas); Pero NUNCA obtendrás nada de código, por lo tanto estás muy lejos de obtener un formulario funcional.
(2) Está limitado a componentes estandard. Cualquier otro componente que no sea de los estandard de Delphi no se podrá crear (inicialmente).

José Luis Garcí 03-04-2008 20:05:27

Cita:

Empezado por Neftali (Mensaje 277237)
En realidad ese ejemplo está hecho en un rato, pero se pueden obtener muchas más características de cada componente. Así que en teoría se puede hacer.
De todas formas, como ya te dije, hay otras formas más sencillas de obtener el DFM; Como puede ser, por ejemplo, Dede, para programas hechos en Delphi.

2 inconvenentes/problemas principales le veo a esto:

(1) Que lo que obtienes es el DFM (de alguna de las formas descritas); Pero NUNCA obtendrás nada de código, por lo tanto estás muy lejos de obtener un formulario funcional.
(2) Está limitado a componentes estandard. Cualquier otro componente que no sea de los estandard de Delphi no se podrá crear (inicialmente).

Estoy totalmente de acuerdo en el tema de que solo crearíamos el DFM con su pas básico, pero el Dede es un de compilador de delphi, mientras que el programa que me comentaban, era sobre cualquier ventana que capturarán, independientemente de que lenguaje se realizara.

Yo lo veo de la siguiente manera, te gusta un diseño, hecho por ti en cualquier otro lenguaje, o realizado por terceros, capturas creas el dfm, trabajas cambiando, lo necesario, añadiendo y quitando de aqui y de allá, y tienes un form en mucho menos tiempo que habitualmente, además cuentas con la ventaja de que ya sabes como puede quedar el diseñó por que partes de una captura.

Neftali si esas pruebas las has realizado en un rato, de mayor quiero ser como tú.:D:D:D

--------------------------------------------------------------------------------------------------------------------------------------------

Veo que obtienen la posición y el tamaño de los componentes estándar, pero no veo el form ni el caption ni tamaños, etc, no se puede obtener. si me permites intentare este fin de semana partiendo del ejemplo, recorrer el árbol e intentar crear una dfm, pero solo si es posible saber el tamaño del form, de todas maneras yo soy mucho más lento programando, intentare terminar un ejemplo y colgarlo, un saludo.

Neftali [Germán.Estévez] 04-04-2008 11:03:30

Cita:

Empezado por José Luis Garcí (Mensaje 277375)
...pero el Dede es un de compilador de delphi, mientras que el programa que me comentaban, era sobre cualquier ventana que capturarán, independientemente de que lenguaje se realizara.

Exactamente; Cada uno tiene sus ventajas e inconvenientes; Al hacerlo con una aplicación de este estilo, te sirve para cualquier lenguaje, pero por contra, al hacerlo con Dede (por ejemplo) el DFM que obtienes es exactamente el que ves en pantalla; El sistema de obtenerlo no es el mismo. Dudo que con una aplicación que recorra las ventanas (aunque obtengas muchas propiedades) llegues a obtenerlas todas; Por ejemplo no creo que puedas obtener los Anchors, los constraits de tamaño, las propiedades de Drag,... Mientras que con Dede sí las obtendrás.

Otra ventaja de Dede es que te permite saber qué eventos de han programado (aunque nunca te dará el código).


Cita:

Empezado por José Luis Garcí (Mensaje 277375)
Veo que obtienen la posición y el tamaño de los componentes estándar, pero no veo el form ni el caption ni tamaños, etc, no se puede obtener. si me permites intentare este fin de semana partiendo del ejemplo, recorrer el árbol e intentar crear una dfm, pero solo si es posible saber el tamaño del form, de todas maneras yo soy mucho más lento programando, intentare terminar un ejemplo y colgarlo...

Sí se pueden obtener los datos del form. Símplemente que al empezar a explrar yo lo he hecho en el ejemplo empezando directamente por los "hijos"; Es decir, por lo componentes del form:

Código Delphi [-]
    // Explorar
    EnumChildWindows(HWActive, @EnumWindowsProc, lParam(@Param));

La variable HWActive contiene el Handle de la ventana que has marcado (del form), por lo tanto si con ese Handle usas GetWindowsRect, GetClassName y el resto de funciones que hay más arriba, obtendrás los datos del form principal.

Revisa la API GetClassInfoEx; Creo que te dará más info sobre la clase. Y GetWindowLong que te dará más datos sobre la ventana.


La franja horaria es GMT +2. Ahora son las 10:36:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi